file_get_html()
我有一个有 2000 个页面的站点,我想使用函数和正则表达式遍历每个页面以生成站点地图。
显然,这不能在一个服务器端执行中完成,因为由于执行时间最长,它会超时。我猜它需要执行较小的操作,将进度保存到数据库,然后排队下一个任务。有什么建议么?
file_get_html()
我有一个有 2000 个页面的站点,我想使用函数和正则表达式遍历每个页面以生成站点地图。
显然,这不能在一个服务器端执行中完成,因为由于执行时间最长,它会超时。我猜它需要执行较小的操作,将进度保存到数据库,然后排队下一个任务。有什么建议么?
当您在命令行运行它时,将没有最大执行时间。
set_time_limit(0);
如果您的提供者允许操作,您也可以使用它。
我不知道您的 IP 地址是否会被禁止 - 因为这取决于您发送请求的服务器的安全性。
其他解决方案
您可以获取一个(或几个)页面,并在整个源代码中搜索新的 URL。然后,您可以在数据库中对这些进行排队。然后在下一次运行时,您处理队列。
使用set_time_limit(0)
. 有关更详细的说明,请参阅PHP 手册。
秒
最大执行时间,以秒为单位。如果设置为零,则不施加时间限制。
编辑:至于您的第二个问题,不太可能,但是,您应该检查您的托管服务使用条款以查看是否允许。
在 php.ini 中将 max_execution_time 设置为 0。它会影响您在服务器上运行的每个脚本,但如果您正在寻找服务器级别的修复程序,这将做到这一点。
http://php.net/manual/en/info.configuration.php#ini.max-execution-time
max_execution_time = 0
对您来说最好的方法是使用远程 api。例如,您可以使用 import.io 并以 json 格式从每个页面获取参数。这是一种在每次调用 file_get_content 或 fly_get_html 时获得轻量级页面的方法
但是对于这个问题 curl 比 file_get_html 更好