【问题标题】:exec from php is causing an "Premature end of script headers: php-cgi.exe" error来自 php 的 exec 导致“脚本头过早结束:php-cgi.exe”错误
【发布时间】:2011-09-08 23:33:01
【问题描述】:

我编写了一个 php 脚本,该脚本使用 exec 调用外部命令,该命令将空间数据库查询结果编译为 shape 文件。在具有大量记录(例如 15,000 条)的表中,执行此命令可能需要长达 7 分钟。该脚本在不需要太长时间(可能

【问题讨论】:

    标签: php timeout exec


    【解决方案1】:

    脚本标头过早结束表示您的脚本超出了网络服务器对 CGI 脚本的超时时间。这是一个网络服务器超时,它与 php.ini 配置无关。您需要查看您的 CGI 处理程序配置以增加 CGI 脚本运行所允许的时间。

    例如如果您使用的是 mod_fastcgi,您可能需要在 Apache 配置中指定以下选项:FastCgiServer -idle-timeout 600,这将使您超时 10 分钟。默认情况下,fastcgi 提供 30 秒。你可以在这里找到其他一些 fastcgi 选项http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html

    【讨论】:

      【解决方案2】:

      显然,Apache 2.4 中包含的默认 httpd.conf 文件不会自动包含 /conf/extra 下的额外文件 httpd-default.conf(可能是设计使然),其中包括超时范围。由于未定义 timeout 参数,它会恢复为默认值 30 秒,并且您的脚本会超时。

      我做了以下解决:

      • 打开 httpd.conf 并在底部添加以下行:

      包括 conf/extra/httpd-default.conf

      • 重新启动 Apache,它工作正常。

      另一种方法是将以下行简单地添加到 httpd.conf 文件中:

      超时 300
      保活开启
      MaxKeepAliveRequests 100
      KeepAliveTimeout 5

      希望这可以帮助那里的人:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-20
        • 2016-04-06
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 2013-07-09
        • 1970-01-01
        相关资源
        最近更新 更多