gpt4 book ai didi

php - 如何快速扫描大型文本文件以获取域名? (Laravel, PHP)

转载 作者:行者123 更新时间:2023-12-04 10:43:13 35 4
gpt4 key购买 nike

我有一个大文本文件,用于检查“错误网址”。在针对此列表处理一堆 url 时,每个 url 大约需要 1 秒来验证它不在该列表中。

这是我当前的代码:

$badDomainsFile = file_get_contents(base_path().'/resources/txt/bad-domains.txt');
$badDomains = explode("\n",$badDomainsFile);
foreach ($badDomains as $badDomain){
if($badDomain===$domain){
$isBadDomain = true;
break;
}
}

我想也许我可以用一些 exec('grep -n $path') 风格的代码加快速度,但我无法让它在我的本地机器(windows)上工作,我相信文件路径会有所不同服务器(linux)呢?我本地机器上 laravel 中的所有内容都通过 Homestead 运行,但我也很困惑 php 脚本是否会针对该文件路径或我自己的网站本地系统位置运行?

任何其他想法来加速这个脚本? (我尝试逐行运行 fgets() 样式脚本,但每个 url 最多需要 11 秒。)

最佳答案

一个可扩展的解决方案是将列表保存在数据库(MySQL 或您用于应用程序其余部分的任何东西)中,并让引擎负责优化。任何像样的数据库引擎都允许开箱即用地索引和缓存列表。因此,减少了加载时间并加快了搜索速度。

当您从文件中读取时,每次从磁盘加载整个文件并执行完整扫描。此操作的复杂度为 O(n)
从具有唯一项的索引列表中读取时,复杂度为 O(1)
即使列表增长到数十亿项,对搜索速度的影响也可以忽略不计。

关于php - 如何快速扫描大型文本文件以获取域名? (Laravel, PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59836099/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com