[英]PHP: Infinity loop and Time Limit!
我有一段代码通过给它一个ID来获取数据。 例如,如果我给它一个ID 1230,则代码从一个网站(外部)获取ID为1230的商品数据,并将其插入到DB中。
现在,问题是我需要获取所有文章,比如说从ID 00001到99999。如果执行“ for”循环,则60秒钟后PHP内部时间限制将停止循环。 如果使用某种header("Location: code.php?id=00001")
或header("Location: code.php?id=".$ID)
并增加$ ID ++,然后重定向到浏览器的同一页由于无限循环或重定向问题而使我停下来。
请帮忙!
如果您的服务器允许您,那么这可能是最好的解决方案:只需删除此脚本的时间限制。
set_time_limit(0);
嗯,有几种方法可以做到这一点。
最好的方法是设置一个cron,每隔X分钟执行一次抓取工具。
sed之后,您将需要跟踪当前使用的id。
因此,如果您设置了写入文件的功能,则可以执行以下方法
-
打开文件(获取当前ID),在ID处启动Parser 60次。插入数据打开文件,并使用新的ID更新文件,然后关闭文件并退出。
这将花费几个小时甚至需要很长时间。
是如果您手动执行此操作并坐在那里并且每次脚本完成后都刷新一下,那么您可以使用会话,而不用将ID写入文件
`session_start(); $id = (isset($_SESSION['position']) ? $_SESSION['position'] : 0); for($i=$id;$<=9999;$i++) { //FetchItem($id); //Or whatever function it is you use! //Update the id for next run. $_SESSION['position'] = $id; }`
如果您愿意覆盖服务器资源,则可以使用set_time_limit(120)或60秒钟将60秒延长60秒。
如果您的服务器不允许您更改脚本时间限制,只需让脚本检查数据库中序列中最后插入的文章,然后从那里开始。
另一种方法:使用Javascript“ window.location =”代替标题进行重定向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.