php在目录中的文件中查找字符串,仅限于某个扩展名

时间:2016-03-29 09:00:36

标签: php

我正在尝试创建一个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;。

0 个答案:

没有答案