查找特定单词并在PHP中列出所有文件名

时间:2015-06-07 08:51:27

标签: php

我还没有处理一个包含太多文件的大型项目。我试图找出它存在的几个vaiables并列出包含特定单词或变量或字符串的所有文件名。

到目前为止我尝试了什么!

$path = realpath(__DIR__); // Path to your textfiles 
$fileList = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::SELF_FIRST);

foreach ($fileList as $item) {
    if ($item->isFile() && stripos($item->getPathName(), 'php') !== false) {
    $file_contents = file_get_contents($item->getPathName());
    $file_contents = strpos($file_contents,"wordtofind");
    echo $file_contents;
    }
}

我使用相同的代码替换我在stackoverflow上找到它的文本。但是在替换特定文件中的特定单词之前,我需要找出几个字符串。因此,这对我来说已成为最重要的任务。

如何进一步编码并获取文件名?

编辑: 我想搜索特定的字词,例如:word_to_find 并且在名为abc的文件夹中有超过200个文件。 当我运行该代码,搜索该单词时,它应该搜索所有200个文件并列出包含word_to_find个单词的所有文件名。

然后我会知道,所有文件,特定单词都存在,然后我可以继续工作。

输出将是:

123.php
111.php
199.php

1 个答案:

答案 0 :(得分:1)

我为你创造了一个很好的功能。这将返回文件名(不是任何路径,如果你想要路径,可能会产生$item->getPathName(),或者可能更好,只需要产生$item,这将返回你可以使用的SplFileInfo类任何帮助函数来获取有关该文件的信息。):     

function findStringInPath($needle, $path = __DIR__) {
    //$path = realpath(__DIR__); // Path to your textfiles 
    $fileList = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::SELF_FIRST);

    foreach ($fileList as $item) {
        if ($item->isFile() && strtolower($item->getExtension()) === 'php') {
            $file_contents = file_get_contents($item->getPathName());
            if ( strpos($file_contents, $needle) !== false )
                yield $item->getFileName();
        }
    }
}

foreach ( findStringInPath('stringtofind') as $file ) {
    echo $file . '<br />';
}

?>

对于较旧的PHP版本:

<?php

function findStringInPath($needle, $path = __DIR__) {
    //$path = realpath(__DIR__); // Path to your textfiles 
    $fileList = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::SELF_FIRST);
    $ret = array();
    foreach ($fileList as $item) {
        if ($item->isFile() && strtolower($item->getExtension()) === 'php') {
            $file_contents = file_get_contents($item->getPathName());
            if ( strpos($file_contents, $needle) !== false )
                $ret[] = $item->getFileName();
        }
    }
    return $ret;
}

foreach ( findStringInPath('stringtofind') as $file ) {
    echo $file . '<br />';
}

?>