11

file_get_html()我有一个有 2000 个页面的站点,我想使用函数和正则表达式遍历每个页面以生成站点地图。

显然,这不能在一个服务器端执行中完成,因为由于执行时间最长,它会超时。我猜它需要执行较小的操作,将进度保存到数据库,然后排队下一个任务。有什么建议么?

4

5 回答 5

22

当您在命令行运行它时,将没有最大执行时间。

set_time_limit(0);如果您的提供者允许操作,您也可以使用它。

我不知道您的 IP 地址是否会被禁止 - 因为这取决于您发送请求的服务器的安全性。


其他解决方案

您可以获取一个(或几个)页面,并在整个源代码中搜索新的 URL。然后,您可以在数据库中对这些进行排队。然后在下一次运行时,您处理队列。

于 2011-08-12T07:17:25.233 回答
3

您应该考虑使用 Job queue 和 worker 实现。我会推荐Gearmanzeromq。这两个都有本机 php 绑定。

于 2011-08-12T07:43:21.573 回答
3

使用set_time_limit(0). 有关更详细的说明,请参阅PHP 手册

最大执行时间,以秒为单位。如果设置为零,则不施加时间限制。

编辑:至于您的第二个问题,不太可能,但是,您应该检查您的托管服务使用条款以查看是否允许。

于 2011-08-12T07:44:05.207 回答
1

在 php.ini 中将 max_execution_time 设置为 0。它会影响您在服务器上运行的每个脚本,但如果您正在寻找服务器级别的修复程序,这将做到这一点。

http://php.net/manual/en/info.configuration.php#ini.max-execution-time

max_execution_time = 0
于 2017-11-29T17:09:47.313 回答
0

对您来说最好的方法是使用远程 api。例如,您可以使用 import.io 并以 json 格式从每个页面获取参数。这是一种在每次调用 file_get_content 或 fly_get_html 时获得轻量级页面的方法

但是对于这个问题 curl 比 file_get_html 更好

于 2015-08-28T01:35:24.683 回答