PHP:无限循环和时间限制!

时间:2010-05-29 23:12:22

标签: php loops redirect infinite-loop

我有一段代码通过为其提供ID来获取数据。例如,如果我给它ID为1230,则代码从网站(外部)获取ID为1230的文章数据并将其插入数据库。

现在,问题是我需要获取所有文章,比如ID 00001到99999。 如果执行'for'循环,60秒后PHP内部时间限制将停止循环。 如果使用某种header("Location: code.php?id=00001")header("Location: code.php?id=".$ID)并增加$ ID ++然后重定向到同一页面,浏览器会因为无限循环或重定向问题而阻止我。

请帮助!

3 个答案:

答案 0 :(得分:1)

如果您的服务器允许,这可能是最佳解决方案:只需删除此脚本的时间限制。

set_time_limit(0);

答案 1 :(得分:0)

你有几种方法可以做到这一点。

最好的方法是设置一个cron来每隔X分钟执行一次刮刀。

您需要跟踪当前的ID。

因此,如果您设置一个函数来写入文件,您可以按照以下方式执行

-

打开文件(获取当前ID)   在id上启动Parser 60次   插入数据     打开文件并使用新ID进行更新       关闭文件并退出。

这将在几个小时的空间内运行,或者需要很长时间。

  1. 如果您手动执行此操作并且坐在那里并在每次脚本完成时刷新,那么您可以使用会话而不是将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;
    }`
    
  2. 如果您愿意覆盖您的服务器资源,您可以使用set_time_limit(120)延长60秒,持续120秒或您喜欢的任何内容。

答案 2 :(得分:0)

如果您的服务器不允许您更改脚本时间限制,只需让您的脚本检查数据库中序列中最后插入的文章并从那里开始。

另一种方法:使用Javascript“window.location =”而不是标题来重定向。