【问题标题】:How to Increase the time till a read timeout error occurs?如何增加发生读取超时错误的时间?
【发布时间】:2010-03-25 16:55:02
【问题描述】:

我用PHP编写了一个脚本,需要很长时间才能执行[图像处理数千张图片]。这是一米小时 - 可能是 5 小时。

处理 15 分钟后,我收到错误消息:


错误 无法检索请求的 URL

在尝试检索 URL 时遇到以下错误:我单击的 URL

Read Timeout

系统返回:[No Error]

等待从网络读取数据时发生超时。网络或服务器可能已关闭或拥塞。请重试您的请求。

您的缓存管理员是网站管理员。


我需要让该脚本运行更长时间。

现在,这里是所有技术信息: 我正在用 PHP 编写并使用 Zend 框架。我正在使用火狐。处理的长脚本是在单击链接后完成的。显然,由于脚本还没有结束,我看到了链接所在的网页,并且网络浏览器写着“等待......”。 15 分钟后出现错误。

我尝试对 Firefox throw about:config 进行更改,但没有任何成功。我不知道,但其他地方可能需要进行更改。

那么,有什么想法吗?

先谢谢了。

【问题讨论】:

    标签: php firefox zend-framework timeout


    【解决方案1】:

    set_time_limit(0) 只会影响脚本的服务器端运行。您收到的错误纯粹是浏览器端的。您必须发送一些东西以防止浏览器确定连接已失效-即使是单个输出字符(后跟flush() 以确保它实际上通过网络发送出去)也可以。可能每处理一次图像,或者在固定的时间间隔 (if last char sent more than 5 minutes ago, output another one)。

    如果您不想要任何中间输出,您可以使用ignore_user_abort(TRUE),这将允许脚本继续运行,即使连接从客户端关闭。

    【讨论】:

    • 我试着写一个“.”每分钟,虽然脚本仍在运行,但它确实写了它。但是 15 分钟后脚本停止了,我只剩下一个只有 15 个点的页面。我尝试使用 ignore_user_abort(TRUE),但没有任何区别。脚本仍未完成。
    • 可能是浏览器需要超过 15 个字节来考虑连接打开。奇怪的是脚本在 15 分钟后使用 ignore_user_abort() 停止。你确定没有别的东西关闭它吗?也许是 max-cpu ulimit?
    【解决方案2】:

    如果该过程运行数小时,那么您可能应该研究批处理。因此,您只需存储图像处理请求(在文件、数据库或任何适合您的东西中),而不是开始图像处理。然后这个请求被一个在服务器上运行的计划(cron)进程接收,该进程将执行实际处理(这可以是一个 PHP 脚本,它调用 set_time_limit(0))。处理完成后,您可以向用户发出信号(通过邮件或任何其他适合您的方式)处理已完成。

    【讨论】:

      【解决方案3】:

      使用 set_time_limit

      文档在这里

      http://nl.php.net/manual/en/function.set-time-limit.php

      【讨论】:

      • 我尝试在长脚本之前编写 set_time_limit(0) 和 set_time_limit(999999),但没有成功。 15 分钟后我仍然收到错误消息。
      【解决方案4】:

      如果您可以分批拆分工作,则在处理 X 图像后显示带有一些 javascript(或 META 重定向)的页面以打开链接 http://server/controller/action/nextbatch/next_batch_id

      冲洗并重复。

      【讨论】:

        【解决方案5】:

        批处理整个过程还有一个额外的好处,即一旦出现问题,您不必重新开始整个过程​​。

        如果您在自己的服务器上运行并且可以退出安全模式,那么您还可以分叉后台进程来完成实际的繁重工作,而与您的浏览器视图无关。如果您处于多核或多处理器环境中,您甚至可以随时安排多个运行进程。

        我们已经为大型计算脚本做了类似的事情;进程的同步发生在共享数据库上——但幸运的是,它们的进程非常独立,我们唯一需要看到的是它们的完成或终止。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-04
          • 1970-01-01
          • 2019-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多