查找具有特定字符串的文件

时间:2013-01-13 08:33:21

标签: php windows unix

我是一个真正的菜鸟。我想知道是否有人可以给我一段代码,它将找到某个目录中的所有文件以及该目录的子目录和用户指定的字符串。并且如果可能的话,限制要搜索的文件类型,例如*.php

我99%有可能使用RecursiveDirectoryIteratorpreg_matchGLOB,但我是php的新手,对这些功能几乎没有任何了解。< / p>

这种代码使用UNIX命令肯定很容易,但是PHP有点卡住(需要PHP而不是unix解决方案)。非常感谢能从你们那里得到的所有帮助!

编辑:似乎我可能会让你们有些困惑。我希望该字符串在文件中不在FILENAME中。

3 个答案:

答案 0 :(得分:10)

您可以轻松完成此任务。

// string to search in a filename.
$searchString = 'myFile';

// all files in my/dir with the extension 
// .php 
$files = glob('my/dir/*.php');

// array populated with files found 
// containing the search string.
$filesFound = array();

// iterate through the files and determine 
// if the filename contains the search string.
foreach($files as $file) {
    $name = pathinfo($file, PATHINFO_FILENAME);

    // determines if the search string is in the filename.
    if(strpos(strtolower($name), strtolower($searchString))) {
         $filesFound[] = $file;
    } 
}

// output the results.
print_r($filesFound);

答案 1 :(得分:2)

仅在FreeBSD上测试...

在传递目录的所有文件中查找string(仅限* nix):

<?php

$searchDir = './';
$searchString = 'a test';

$result = shell_exec('grep -Ri "'.$searchString.'" '.$searchDir);

echo '<pre>'.$result.'</pre>';

?>

仅使用PHP在传递目录中的所有文件中查找string(不建议在大型文件列表中使用):

<?php

$searchDir = './';
$searchExtList = array('.php','.html');
$searchString = 'a test';

$allFiles = everythingFrom($searchDir,$searchExtList,$searchString);

var_dump($allFiles);

function everythingFrom($baseDir,$extList,$searchStr) {
    $ob = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($baseDir), RecursiveIteratorIterator::SELF_FIRST);
    foreach($ob as $name => $object){
        if (is_file($name)) {
            foreach($extList as $k => $ext) {
                if (substr($name,(strlen($ext) * -1)) == $ext) {
                    $tmp = file_get_contents($name);
                    if (strpos($tmp,$searchStr) !== false) {
                        $files[] = $name;
                    }
                }
            }
        }
    }
    return $files;
}
?>

编辑:根据更多细节进行更正。

答案 2 :(得分:2)

我找到了一个小文件来搜索文件夹中的字符串:

在此处下载文件from