2014-01-16 2 views
0

Я пытаюсь найти папку и извлекать файлы внутри папки (получить контент) Я могу искать папку, используя следующий код но я не могу пройти оттуда, я не вижу, как содержимое извлекает файлы внутри. Файлы внутри будут txt-файлами, и я бы хотел, чтобы их можно было открыть и посмотреть. Как добиться того, чего я хочу? Спасибо.Найти папку и получить содержимое файлов внутри

<?php 
$dirname = "C:\windows";//Directory to search in. *Must have a trailing slash* 
$findme = $_POST["search"]; 

$dir = opendir($dirname); 

while(false != ($file = readdir($dir))){//Loop for every item in the directory. 
if(($file != ".") and ($file != "..") and ($file != ".DS_Store") and ($file != 
"search.php"))//Exclude these files from the search 
{ 
$pos = stripos($file, $findme); 
if ($pos !== false){ 
$thereisafile = true;//Tell the script something was found. 
echo'<a href="' . $dirname . $file . '">' . $file . '</a><br>'; 
}else{ 

} 
} 
} 
if (!isset($thereisafile)){ 
echo "Nothing was found.";//Tell the user nothing was found. 
echo '<img src="yourimagehere.jpg"/>';//Display an image, when nothing was found. 
} 
?> 
+0

Sidenote: '' && имеет приоритет над 'AND', так что вы можете использовать это вместо этого. –

+0

'glob()' является хорошим вариантом, а также лучшим именем php-функции когда-либо! Все еще ждет 'wet()' –

ответ

0

В следующем коде используется рекурсивная функция для поиска в каталоге. Надеюсь, это решит вашу проблему.

function scandir_r($dir){ 
$files = array_diff(scandir($dir), array(".", "..")); 
$arr = array(); 
    foreach($files as $file){ 
    $arr[] = $dir.DIRECTORY_SEPARATOR.$file; 
     if(is_dir($dir.DIRECTORY_SEPARATOR.$file)){ 
     $arr = array_merge($arr, scandir_r($dir.DIRECTORY_SEPARATOR.$file)); 
     } 
    } 
return($arr); 
} 

$dirname = "C:\windows"; 
$findme = "/".preg_quote($_POST["search"], "/")."/"; 
$files = preg_grep($findme, scandir_r($dirname)); 
if(sizeof($files)){ 
    foreach($files as $file){ 
    $_file = $dirname.DIRECTORY_SEPARATOR.$file; 
    echo "<a href=\"$_file\">$file</a><br/>"; 
    } 
} 
else{ 
echo "Nothing was found."; 
echo "<img src=\"yourimagehere.jpg\"/>"; 
} 
+0

У меня такой же результат, просто найдите папку, но я не вижу файлы в ней – marcos

+0

См. Мой обновленный ответ. –

+0

Спасибо, что хорошо работает – marcos

0

Новый код

<?php 
$dirname = "C:\\Windows\\";//Directory to search in. *Must have a trailing slash* 
$findme = 'maxlink'; //$_POST["search"]; 

$files = scandir($dirname); 


foreach ($files AS $file) 
{ 
    if ($file == '.' or $file == '..' or $file == '.DS_Store' or $file == 'search.php') continue; 

    if (stripos($file, $findme) !== false) 
    { 
     $found = true; 
     echo 'FOUND FILE <a href="' . $dirname . $file . '">' . $file . '</a><hr>'; 
     echo 'OPENING IT:<br>'; 
     echo file_get_contents($dirname . $file); 
     echo '<hr>'; 
    } 
    else 
    { 
     echo 'not found: <a href="' . $dirname . $file . '">' . $file . '</a><br>'; 
    } 
} 

if (!isset($found)) 
{ 
    echo "Nothing was found.";//Tell the user nothing was found. 
    echo '<img src="yourimagehere.jpg"/>';//Display an image, when nothing was found. 
} 
+0

Спасибо, но я могу найти идеальную папку, но я новичок в php, и я хочу видеть файлы внутри папки, которую я искал – marcos

+0

@marcos. Вам просто нужно указать имя файла эха в пустой ELSE у тебя есть. – Tom

+0

@marcos Извините, вас неправильно поняли. Вы хотите повторить содержимое найденного вами файла (или всех файлов одновременно) и выйти из сценария? – Tom

Смежные вопросы