【问题标题】:PHP Start script where it timed outPHP 启动脚本超时
【发布时间】:2013-05-18 17:33:23
【问题描述】:

我目前正在构建一个网络爬虫,但首先我想在我的共享虚拟主机上对其进行测试,显然他们不允许set_time_limit,所以我无法确保脚本持续运行超过 30 秒。

下次超时时启动 PHP 脚本的最佳方式是什么? 我正在考虑将上次抓取的 URL 保存在文件中,但还有其他选择吗?

【问题讨论】:

  • 既然您正在构建一个网络爬虫,请考虑将当前爬取的 URL 存储在某处,然后如果爬虫崩溃,您可以从该特定 URL 恢复。
  • 没错,问题是脚本在有机会爬取一页之前经常超时。
  • 如果您在超时后保存上次抓取的 url 以供恢复,请务必跳过并重新安排失败的 url。否则,您可能会在损坏的页面上陷入无限循环。

标签: php web-crawler


【解决方案1】:

编辑: ScallioXTX 是对的,您不能将变量用作goto 标签。你可以用一个非常大的if 声明来解决这个问题,但在这一点上,我想说最好不要使用goto。这是另一种方法:

<?php

    // Load label number from database or text file into $label_num

    if($label_num <= 1) {
        // Do stuff
    }

    if($label_num <= 2) {
        // Do more stuff
    }

    // ...

?>

旧的(不正确的)方法:

你当然可以使用goto:http://us1.php.net/goto

我只会将此作为临时措施,直到您获得更好的托管服务。

我会这样做:

  1. 在代码中的不同位置写一个标签(例如count1:count2: 等)
  2. 在您添加标签的每个位置,将该标签名称写入数据库或文本文件中
  3. 在脚本的开头,加载该值并跳转到指定的标签

例子:

<?php

    // Load label number from database or text file into $label_num

    if($label_num) {
        goto $label_num;
    }

    count1:
    // Do stuff

    count2:
    // Do more stuff

    // ...

?>

【讨论】:

  • -1 你不能 goto 一个变量名,这会导致解析错误(请参阅 Ray dot Paseur 在 Gmail dot com 中 the documentation 的评论)
  • 谢谢,我看看能不能用这个,有点棘手! :)
猜你喜欢
  • 2021-02-12
  • 2011-11-02
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
相关资源
最近更新 更多