使用php在文本文件中搜索短语/单词

时间:2010-02-28 18:43:48

标签: php search full-text-search directory

如何扫描目录中的特定文本行并用php列出所有匹配的文件?

感谢。

7 个答案:

答案 0 :(得分:7)

我实际上几天前为此写了一个函数......

这是扫描每个文件的基本功能......

foreach (glob("<directory>/*.txt") as $search) {
    $contents = file_get_contents($search);
    if (!strpos($contents, "text")) continue;
    $matches[] = $search;
}

不是最先进的方法,我的功能要长得多,但它也使用了我其他各种类的所有功能,这基本上就是它的功能。

答案 1 :(得分:1)

另一种方法是读取php文件,将内容放入数组并使用类似preg_grep的内容。

如果文件数量可能非常大,您可能希望将UNIX grep 命令与php exec 一起使用。

我个人会去寻找第二个解决方案。

答案 2 :(得分:1)

这是一个简单的例子,说明如何在php中严格完成...

  1. 获取目录中所有文件/目录的列表。

  2. 检查每个文件/目录名称是否为文件

  3. 获取文件的内容

  4. 使用字符串搜索功能查找我们正在寻找的字符串的匹配项。如果存在匹配项,请打印文件名

  5. MEEP

    <?php
    $path = 'c:\\some\\cool\\directory';
    $findThisString = 'Cool Cheese';
    
    $dir = dir($path);
    
    // Get next file/dir name in directory
    while (false !== ($file = $dir->read()))
    {   
        if ($file != '.' && $file != '..')
        {
            // Is this entry a file or directory?
            if (is_file($path . '/' . $file))
            {
                // Its a file, yay! Lets get the file's contents
                $data = file_get_contents($path . '/' . $file);
    
                // Is the str in the data (case-insensitive search)
                if (stripos($data, $findThisString) !== false)
                {
                    // sw00t! we have a match
                echo 'match found in ' . $file . "<br>\n";
                }
            }
        }
    }
    
    $dir->close();
    
    ?>
    

答案 3 :(得分:1)

如果文件很大,则必须将每个文件读入内存然后搜索其内容,这是过分的。

如果您对目录具有读取权限,则可以通过将execegrep组合来找出针所在的文件:

php > exec("egrep -rl 'string of what I want to find' full-or-relative-directory", $output);
php > print_r($output);
Array
(
  [0] => full-or-relative-directory/foo/bar.xml
)
php > $contents = file_get_contents($output[0]);

答案 4 :(得分:0)

好吧,首先你可能希望获得glob感兴趣的文件列表(如果你想要多个扩展,只需合并生成的数组或使用this)。然后遍历结果,使用file_get_contents打开文件,并使用strpos检查字符串。

答案 5 :(得分:0)

我不会在这里提出我的建议答案,因为有5个人已经就如何解决这个问题发表了很好的答案,但会推荐一个替代方案。

您是否考虑过使用Lucene搜索引擎的PHP实现?最值得注意的是来自Zend Framework。最好的是你不必使用框架来使用Lucene库(只需包含库基本文件 - 记住将Zend Libraries目录添加到include路径中)。

我自己没有使用它,并且听过非常复杂的评论。我唯一能想到的是它对于一个小脚本或项目来说可能太复杂了。

Zend框架参考指南中有一篇非常详细的overview of the Lucene Library

答案 6 :(得分:-1)

$directory = "/var/www/application/store/"; //define the path
$files1 = scandir($directory); //scandir will scan the directory 
$c = count($files1); //this will count all the files in the directory
print $c;