【问题标题】:PHP server timeout on script脚本上的 PHP 服务器超时
【发布时间】:2012-01-20 13:08:03
【问题描述】:

我正在开发一个需要大量时间的 wordpress 插件的功能。 它连接到 TMDb(电影数据库)并按 id(从 0 到 8000)一一检索所有电影,并创建一个保存在本地服务器上的 XML 文档。 当然要花很多时间,PHP说“504 Gateway Time-out The server didn't及时响应。”

我该怎么办????有什么建议!!!

【问题讨论】:

    标签: php apache wordpress plugins timeout


    【解决方案1】:

    假设一次性执行并且它正在轰炸你,你可以将set_time_limit 设置为 0 并允许它执行。

    <?php
      set_time_limit(0); // impose no limit
    ?>
    

    但是,我会确保它不在生产环境中,并且只会在您希望它运行时运行(否则这会在服务器上放置(并继续放置)大量负载)。

    【讨论】:

    • 大部分服务器都在安全模式下运行,所以我不能设置时间限制!我正在寻找一些聪明的方法来编码它,我几乎是 PHP 新手,这就是我寻找建议的原因。这个插件的脚本将只运行一次以与数据库同步!
    • @Max:另一个选项是在加载时输出内容,因此它不是“死连接”。您可以每隔这么多读取执行一次echo 'Working...'; flush();,它将继续将数据推送到侦听客户端,直到完成。
    • 谢谢!!当“冲洗”时,我正在清理缓存或其他什么?我会丢失未保存的 xml 文档吗?它会延长我执行流程的时间吗?
    • @max: flush 告诉 php 强制输出任何等待发送到客户端的内容。通常,PHP 在发送它之前会保留整个文档的内容(等待整个页面被呈现),因此它可以准确地填充Content-Length 标头。但是,您可以通过调用 flush 来绕过它,并强制将积压日志中的任何内容发送给客户端。
    • 我想到了@Brad 建议中的一些内容:在客户端通过 AJAX 执行此操作,但以块的形式下载数据,并在每个块下载并保存到数据库时通知用户表或临时文件(x 中的 1 个已完成 ....)。完成后,编写 XML,也许将其保存为缓存供以后使用,并显示链接以下载它(如果合适)。
    【解决方案2】:

    尝试设置:

    set_time_limit(0);
    

    在脚本头部。但我认为这是服务器的问题,你读得太长了。尝试以线程模式读取。

    【讨论】:

    • 大部分服务器都在安全模式下运行,所以我不能设置时间限制!我正在寻找一些聪明的编码方式,我几乎是 PHP 新手,这就是为什么我正在寻找建议..
    • 我认为这是不可能的。需要更多时间。搜索可以给你的服务器
    【解决方案3】:

    我认为这与脚本超时无关。

    504- 网关超时问题完全是由于后端计算机之间的 IP 通信缓慢,可能包括 Web 服务器。

    修复: 使用代理或增加缓存大小(在 php.ini 中搜索“缓存”并使用它)限制。

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多