2017-06-07 2 views
0

Ich bin nicht sicher, wie man einen Code schreibt, um nach Dateien in einem Ordner zu suchen. Ich habe den Code unten, um alle Dateien von einem Ordner Aufruf "Dateien" anzuzeigen.PHP Search File

Beispiel Datei

abc-def.txt 
ghi-jkl.txt 

so würde ich wie ein Eingang haben, wie, wo, wenn ich wie abc eingeben, damit es für alle Datei suchen, die abc in ihm haben und angezeigt werden. ist es möglich ?

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

Ich brauche Hilfe darin.

+0

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

+0

durch eine oder die Spitzen funktioniert es – needhelp

Antwort

0

Es ist eine nette Funktion glob durch Muster zu suchen:

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

Dank oder die tipps – needhelp

-1

Verwenden glob Pfadnamen zu finden, ein Muster oder eine GlobIterator entsprechen.

Wenn Sie das rekursiv benötigen, verwenden Sie einen RegexIterator und einen RecursiveDirectoryIterator. See here

+0

danke ein oder die tipps – needhelp

0

Das ist mein Lehrbeispiel

<?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

Entschuldigung wenn das ein bisschen umständlich ist - ich bin noch nicht an die Stack-Form gewöhnt. –