我还没有处理一个包含太多文件的大型项目。我试图找出它存在的几个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
答案 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 />';
}
?>