PHP:无限循环和时间限制!
问题描述:
我有一段代码通过给它一个ID来获取数据。例如,如果我给它一个1230的ID,代码将从网站(外部)获取ID为1230的文章数据并将其插入数据库。PHP:无限循环和时间限制!
现在,问题是我需要获取所有文章,可以从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为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秒120秒或任何你喜欢的东西。
答
如果您的服务器不会让你改剧本时间限制,只需要你的脚本检查数据库中的序列中的最后插入的文章,并从那里开始。
另一种方法:使用Javascript“window.location =”而不是标题来重定向。
... meh。如果他拥有一个非常繁忙的网站,那么通过运行该脚本,或者他计划继续收集这些数据而不是一次性收集这些数据,Cron确实只能走这条路。真的,这个脚本应该只在他的计算机上运行,而不是在远程主机上运行。 – Matchu 2010-05-30 00:01:09
完全同意,Scraping占用了太多的服务器资源,如果我在刮我会设置一个cron在我的网站最忙的时候运行! – RobertPitt 2010-05-30 00:13:29
我在localhost上运行这个脚本,然后通过导入数据库来联机数据库,所以它不是问题。我遇到的问题是我不知道CRON。但我想我会通过设置set_time_limit(0)来做到这一点。 – Jonathan 2010-05-30 00:37:44