Файловый сканер PHP

просто интересно, как можно было бы рекурсивно искать в каталоге папок веб-сайта (тот же, что и сценарий загружен), и открывать / читать каждый файл и искать определенную строку?

например, я мог бы это сделать:

search.php? строка = привет% 20world

это приведет к запуску процесса, а затем приведет к

"hello world found inside" httpdocs /index.php /contact.php httpdocs/private/ ../prviate.php ../morestuff.php ../tastey.php httpdocs/private/love ../../goodness.php 

Я не хочу, чтобы он связывался с обходными файлами как приватными файлами, а несвязанные файлы были круглыми, но я хотел бы, чтобы каждый другой небинный файл имел доступ.

большое спасибо

Оуэн

Solutions Collecting From Web of "Файловый сканер PHP"

На ум приходят два непосредственных решения.

1) Использование grep с командой exec (только если сервер поддерживает ее):

 $query = $_GET['string']; $found = array(); exec("grep -Ril '" . escapeshellarg($query) . "' " . $_SERVER['DOCUMENT_ROOT'], $found); 

После завершения каждый путь к файлу, содержащий запрос, будет помещен в $found . Вы можете проходить через этот массив и обрабатывать / отображать его по мере необходимости.

2) Рекурсивно прокрутите папку и откройте каждый файл, найдите строку и сохраните ее, если она найдена:

 function search($file, $query, &$found) { if (is_file($file)) { $contents = file_get_contents($file); if (strpos($contents, $query) !== false) { // file contains the query string $found[] = $file; } } else { // file is a directory $base_dir = $file; $dh = opendir($base_dir); while (($file = readdir($dh))) { if (($file != '.') && ($file != '..')) { // call search() on the found file/directory search($base_dir . '/' . $file, $query, $found); } } closedir($dh); } } $query = $_GET['string']; $found = array(); search($_SERVER['DOCUMENT_ROOT'], $query, $found); 

Это должно (непроверено) рекурсивно искать в каждой подпапке / файле для запрашиваемой строки. Если он будет найден, он будет в переменной $found .

Если вы не можете использовать какой-либо из указанных методов, вы можете использовать рекурсивный путь каталогов с обратным вызовом . И определите свой обратный вызов как функцию, которая проверяет данный файл для данной строки.

если список каталогов включен, вы можете попробовать

 <?php $dir = "http://www.blah.com/"; foreach(scandir($dir) as $file){ print '<a href="'.$dir.$file.'">'.$file.'</a><br>'; } ?> 

или

 <?php $dir = "http://www.blah.com/"; $dh = opendir($dir); while (false !== ($file = readdir($dh))) { print '<a href="'.$dir.$file.'">'.$file.'</a><br>'; } ?>