PHP文件搜索
我需要用php进行文件搜索,用glob进行文件名搜索,但我仍然需要搜索文件内部 我有一个原型,在,但我需要关键字和建议。此外,它还需要查看文件内部以查找匹配项PHP文件搜索,php,file,search,Php,File,Search,我需要用php进行文件搜索,用glob进行文件名搜索,但我仍然需要搜索文件内部 我有一个原型,在,但我需要关键字和建议。此外,它还需要查看文件内部以查找匹配项 有人对如何做这类事情有想法吗 一个非常基本的方法是将每个文件读入PHP,并使用其中一个字符串搜索函数进行搜索 if (preg_match('/pattern/', file_get_contents($file))) { echo "found pattern in $file\n"; } //loop through all
有人对如何做这类事情有想法吗 一个非常基本的方法是将每个文件读入PHP,并使用其中一个字符串搜索函数进行搜索
if (preg_match('/pattern/', file_get_contents($file))) {
echo "found pattern in $file\n";
}
//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'),
//...
);
<?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);
}
?>
- 循环遍历每个文件,获取其内容
- 把这些话说出来
- 保留在该文件中找到的唯一单词的记录
- 将该记录存储在数据库或磁盘上的文件中
$words = array(
'mobile' => array('filename1.txt', 'filename2.txt'),
'answer' => array('filename3.txt', 'filename5.txt', 'filename6.txt'),
//...
);
<?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);
}
?>
然后,当您搜索某个关键字时,您只需要从索引文件或数据库加载索引,然后查看该关键字所在的文件名
if (isset($words[$keyword])) {
echo "Found in: " . join(', ', $words[$keyword]) ;
}
你有一个非常简单的方法来做这样的事情。接下来,您可以将索引存储到数据库中,计算每个文件中找到一个单词的次数以提供更相关的结果,等等。在php中将整个文件读入一个变量? 说真的,来吧!php是一种超文本脚本语言! 您将遇到内存错误和其他不好的事情。。。 只有当您知道您的文件每个最大不超过百分之几KB时,才可以这样做 如果您想要性能,这里有一个针对oyu的解决方案:
<?php
$handle = popen('grep regex /path/to/file.txt', 'r');
$output = fread($handle, 2096);
pclose($handle);
?>
使用外部grep实用程序。
您可以使用一些开关来报告位置(偏移量),以查看找到匹配的位置
其工作原理如下(这次使用exec而不是popen进行演示):
很好的解释!——如果它对您可用,您可以使用cron作业来更新索引,例如每日更新。--Cron jobs以预设的时间或间隔()在服务器上执行一个文件。这是我最初想要做的,但搜索必须是实时的。@带有索引和建议的tann实时搜索可能超出了您尝试执行的范围。只需每隔几分钟运行一次索引器,或者以您期望的文件更改频率运行一次索引器,使其始终具有新的索引数据。要获得最高效的解决方案,您需要将作业移交给专门为此目的设计的工具。见: