1

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

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

请帮忙!

4

3 回答 3

1

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

set_time_limit(0);
于 2010-05-29T23:48:53.057 回答
0

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

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

这被 sed 您需要跟踪您当前的 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 秒或任何您喜欢的时间。

于 2010-05-29T23:55:56.257 回答
0

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

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

于 2010-05-29T23:56:50.863 回答