我正在尝试创建一个php脚本,它将搜索服务器上的目录(及其所有子目录),然后搜索所有文件中的特定字符串,仅当文件是某种类型时 - 例如:查看php或html文件,但不能查看jpg或png文件。
我有一个脚本会搜索目录并列出文件,但不会搜索文件。
在SO上有一些类似的问题可以解决这个问题,但我需要一些帮助将它们整合在一个脚本中。
我需要能够仅在某些类型的文件中进行脚本搜索,以限制脚本的运行资源。
因此脚本需要执行以下操作:
. search the directory (and sub-directories)
. check if extension is .php or .htm or .html
. if no, move to the next file
. if yes, look inside the content of the file for "mystring"
. if the file does not contain the string, move to the next file
. if the file does contain the string, output the filename and path
最终结果是在浏览器窗口中加载php文件并让它输出所有找到的文件的列表,其中包含路径:
/mypath/filename1.php
/mypath/filename2.htm
/etc
到目前为止,我有这个脚本,它将搜索所有目录和子目录并查找特定的文件类型:
$path = "/mypath/toplevel/";
$count = 0;
$folder = "root";
function list_all_files($path) {
global $count;
$handle = opendir($path);
while ($file = readdir($handle)) {
if($file != '.' && $file != '..') {
if(is_dir($path . "/" . $file)) {
list_all_files($path . "/" . $file);
}
if(!is_dir($path . "/" . $file)) {
if ((strpos($file, '.php') !== false) || (strpos($file, '.htm') !== false) || (strpos($file, '.html') !== false)) {
$fileName = "" . $path . "/" . $file . "";
$fileContents = file_get_contents($fileName);
$searchStr = "mysearchstring";
if ($fileContents) {
$matchCount = preg_match_all($searchStr, $fileContents, $matches);
if ($matchCount) {
$count = $count + 1; echo "$fileName\n";
}
}
}
}
}
}
closedir($handle);
}
list_all_files($path);
echo "$count file(s) found.<br /><br />\n";
但这似乎不起作用,因为我正在搜索已知字符串,但此脚本返回&#34;找到的文件&#34;。