【问题标题】:PHP to search inside 30,000 text filesPHP 在 30,000 个文本文件中搜索
【发布时间】:2023-03-15 21:12:02
【问题描述】:

我有一个包含大约 30,000 个文本文件的目录,我想在每个文件中搜索以查找它们是否包含指定的文本。如何在 PHP 中有效地做到这一点?

【问题讨论】:

  • 对 grep 进行系统调用。说真的。
  • 你为什么要使用 PHP?
  • 这听起来像是最近发布的一个问题......答案仍然是“不要使用 PHP”——或者使用 PHP 来调用不是 PHP 的东西。跨度>
  • 为了获得最高性能的解决方案,您需要将工作移交给为此目的而设计的工具。比grep 快得多。见:stackoverflow.com/a/40773407/65732
  • 当你搜索“php to search inside file”@stack 的搜索框时首先弹出这个问题。我只能说:哇。过去的美好时光,实际上可以容忍甚至接受偏离主题的答案:)

标签: php file search text


【解决方案1】:

grep 是你的朋友。如果出于某种原因您需要 PHP 脚本中的结果,您可以使用允许执行外部命令的 php 函数之一来调用它。

【讨论】:

  • 如果他真的有 30k 个文件,他需要 grep -r [exp] folder-with-30k-files/ ,否则他会打破系统的 ARG_MAX 限制,grep 只会说“参数太多”。
  • @Tim: 可以随时使用xargs 为其提供文件名。
【解决方案2】:

1) 如上所述使用 grep

2) 缓存搜索结果,这样您就不必再次搜索 30,000 个文本文件来查找相同的搜索词。

【讨论】:

    【解决方案3】:

    正如其他人所说,grep 是你的朋友,为它做一个系统调用。

    【讨论】:

      【解决方案4】:

      另外,考虑使用类似 Lucene 的东西构建搜索索引:http://lucene.apache.org/java/docs/index.html

      【讨论】:

        【解决方案5】:

        所有文件都将保持相同的名称吗?是否要添加任何文件,或者是否设置为 30,00?如果所有文件名都保持不变,并且不会添加任何文件,我会创建一个索引(可能是 index.txt),然后分解它以获得关键字的文件名。

        【讨论】:

          猜你喜欢
          • 2011-04-19
          • 1970-01-01
          • 2023-03-28
          • 1970-01-01
          • 2015-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多