2017-06-07 11 views
0

フォルダ内のファイルを検索するコードを書く方法がわかりません。私はフォルダー "ファイル"を呼び出すすべてのファイルを表示する以下のコードを持っています。ファイルのPHP検索ファイル

例は

abc-def.txt 
ghi-jkl.txt 

ので、私はそれはそれでABCを持つすべてのファイルを検索して表示されますので、私はABCのように入力すると、入力のように持っていたいと思いました。出来ますか ?

$thelist = ""; 
if ($handle = opendir('./files/')) { 
    while (false !== ($file = readdir($handle))){ 
    if ($file != "." && $file != ".."){ 
     $thelist .= $file . '<br>'; 
    } 
    } 
    closedir($handle); 
} 
echo $thelist; 
unset($thelist); 

私はそれに助けが必要です。

+0

'glob()は' http://php.net/manual/en/function.glob.php – CD001

+0

感謝やヒント、それは – needhelp

答えて

0

パターンで検索するにはすてきな機能globあり:パターンやGlobIteratorにマッチするパス名を見つけること

$pattern = filter_input(INPUT_POST, 'pattern', "*.txt", FILTER_SANITIZE_STRING); 
foreach (glob($pattern) as $filename) { 
    echo "$filename \n"; 
} 
+0

おかげで動作しますかヒント – needhelp

-1

使用globが。

再帰的にする必要がある場合は、RegexIteratorとRecursiveDirectoryIteratorを使用します。 See here

+0

ありがとうまたはヒント – needhelp

0

これは私の指導例である

<?php // demo/find_matching_files.php 
/** 
* Put this script in the web root or other high-level directory 
* 
* Traverse this directory and all sub-directories down the tree 
* Show the matching files 
* 
* http://php.net/manual/en/class.recursivedirectoryiterator.php#85805 
*/ 
error_reporting(E_ALL); 

// USE THE OUTPUT BUFFER TO COLLECT THE LIST OF FILES 
ob_start(); 

// USE THE REQUEST VARIABLE TO MATCH A SUBSTRING OF THE FILE NAME 
$q = !empty($_GET['q']) ? $_GET['q'] : NULL; 
if (empty($q)) trigger_error('Missing URL request argument "q=" for file name', E_USER_ERROR); 

// CONSTRUCT THE REGEX 
$rgx 
= '#'   // REGEX DELIMITER 
. preg_quote($q) 
. '#'   // REGEX DELIMITER 
. 'i'   // CASE-INSENSITIVE 
; 

// START IN THE CURRENT DIRECTORY 
$path = realpath(getcwd()); 

// COLLECT THE DIRECTORY INFORMATION OBJECTS 
$objs = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); 

// ITERATE OVER THE OBJECTS 
foreach($objs as $name => $obj) 
{ 
    if (preg_match($rgx, $name)) echo PHP_EOL . $name; 
} 

// IF THERE ARE MATCHES OR NO MATCHES 
$out = ob_get_clean(); 
echo '<pre>'; 
if (empty($out)) 
{ 
    echo PHP_EOL . "No match found for <b>$q</b>."; 
} 
else 
{ 
    echo PHP_EOL . "Matches for <b>$q</b>."; 
} 

// SHOW THE GIT BRANCH 
$root = '.git/HEAD'; 
$text = @file_get_contents($root); 
if ($text) 
{ 
    $text = explode(DIRECTORY_SEPARATOR, $text); 
    $text = array_slice($text, 2); 
    $name = implode(DIRECTORY_SEPARATOR, $text); 
    echo PHP_EOL . "On Git branch: $name" . PHP_EOL; 
} 
else 
{ 
    echo PHP_EOL . "On Git branch: UNKNOWN" . PHP_EOL; 
} 

// SHOW THE MATCHES 
echo $out; 
+0

これは少し厄介な場合はお詫び - 私はまだスタックフォームに慣れていないよ。 –