我有一个不寻常的问题。使用PHP脚本,我必须遍历一个包含约100万个小型文本文件(大小范围为1KB至1MB)的文件夹,并仅选择在特定间隔内且包含特定搜索字符串的内容中带有ctime
的那些文本。
第一部分(选择创建时间在一定范围内的文件)是我使用readdir
管理的,但是检查文件内容中的搜索字符串被证明是一个挑战。使用file_get_contents
(然后使用stripos
)根本不会。它很慢,它使我的PHP脚本崩溃了。
我肯定不是第一个遇到这种问题的人,但我不是PHP开发人员。该代码是从以前的开发人员继承的。我不确定应该使用哪种替代方案,以及什么代码可以节省服务器RAM和CPU。
答案 0 :(得分:3)
我会尝试将shell_exec
与find
和grep
结合使用:
$output = shell_exec("find . -type f -ctime $MyCtime -exec grep -H -m 1 $MySearchString {} +;");
-H
以显示文件名
-m 1
在文件中首次出现时停止搜索
答案 1 :(得分:2)
PHP无法轻松处理它(这将花费大量时间+会使CPU过载),请考虑使用bash和正则表达式来解决问题
简而言之,PHP在这种情况下不是正确的工具