PHP文件搜索

时间:2010-09-23 16:31:42

标签: php file search

我需要用php进行文件搜索,我的文件名搜索下来,使用glob,但我仍然需要在文件内搜索。

我有一个原型,tann98.vacau.com/file-search,但我需要关键字和建议。另外,它需要查看内部文件才能找到匹配项。

有没有人有关于如何做这件事的想法?

3 个答案:

答案 0 :(得分:2)

一个非常基本的方法是将每个文件读入PHP并使用其中一个字符串搜索功能搜索它们。

//loop through all filenames and for each one:
$contents = file_get_contents($filename) ;
if (strpos($contents, $keyword) !== false) {
    //found a match!
}

然而,效率非常低,因为每次执行搜索时都必须执行该文件的读取和搜索。

这就是为什么搜索引擎会提前创建他们所知道的整个文件的索引,然后只查看搜索关键字的索引。如果你想研究一下,你需要一个单独的脚本(比如indexer.php)来做这样的事情:

  • 遍历每个文件,获取其内容
  • 将这些分解为单词
  • 记录该文件中的唯一字词
  • 将该记录存储在磁盘上的数据库或文件中

让它不时运行以更新其索引。它的索引可以是这样的:

$words = array(
    'mobile' => array('filename1.txt', 'filename2.txt'),
    'answer' => array('filename3.txt', 'filename5.txt', 'filename6.txt'),
    //...

);

然后,当您搜索某个关键字时,您只需要从索引文件或数据库加载索引,并查看找到该字的文件名。

if (isset($words[$keyword])) {
    echo "Found in: " . join(', ', $words[$keyword]) ;
}

你有一种非常简单的方法来做这样的事情。您可以将索引存储到数据库中,计算每个文件中找到的单词的次数以提供更相关的结果等等。

答案 1 :(得分:0)

if (preg_match('/pattern/', file_get_contents($file))) {
   echo "found pattern in $file\n";
}

答案 2 :(得分:0)

将整个文件读入php中的变量? 说真的,加油! php是一种超文本脚本语言! 你会遇到内存错误和丑陋的其他事情...... 只有当你知道你的文件不超过每个hundret千字节的最大值时才这样做...

如果你想要表现,这里是oyu的解决方案:

<?php
$handle = popen('grep regex /path/to/file.txt', 'r');
$output = fread($handle, 2096);
pclose($handle);
?>

利用外部grep实用程序。 您可以给一些开关报告位置(偏移量)以查看匹配的位置 这是这样的(这次使用exec代替popen用于演示目的):

<?php
exec('grep "REGEX" /path/to/file.txt -b', $result);
?>

这可能只适用于linux ......

如果你真的想在php中做这个或者这对你不起作用,不要使用file_get_contents或类似的东西,但要搜索文件。像这样的maby:

<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
if (preg_match('/pattern/', $buffer)) {
   echo "found pattern in $buffer\n";
}
    }
    fclose($handle);
}
?>

不是那个缓冲区可能会被切断为4095字节...... fgets逐行读取,但您可以指定最大值。