fastcgi脚本的处理程序返回了无效的结果代码


Handler for fastcgi-script returned invalid result code

我对连接到SOAP 1.2+WSDL服务的PHP应用程序有一个奇怪的问题:

以前的信息:Apache服务器2.4与php5-fcgi模块。我正在为SOAP服务开发一个客户端,我可以对该服务进行一些请求。

请求需要一些时间才能完成。我需要做一个set_time_limit(60),因为如果我没有它,脚本会返回空闲超时错误:

FastCGI:与服务器"/usr/lib/cgi-bin/php5-fcgi"的通信中止:空闲超时(30秒)

使用set_time_limit,我得到了另一个不同的错误:

AH00524:fastcgi脚本的处理程序返回无效的结果代码1

当我尝试执行SOAP请求时,会出现这些错误。没有它,页面工作正常。

由于日志中有这个错误,我在navigator上有另一个不同的错误。在IE上,页面不加载,Firefox显示"内容编码错误"页面。

如果我尝试在屏幕上显示SOAP连接结果(使用var_dump),以及如果我尝试执行请求但没有将其发送到屏幕,则会出现这些错误。

在搜索"内容编码错误"时,我发现了一些关于压缩的信息。我曾尝试在set_time_limit之前和之后执行"ob_start",但当我尝试执行时,我在日志中收到了一个超时错误(我认为PHP没有更改超时),而且页面显示了一个500内部服务器错误。

怎么了?我认为唯一能解决这些问题的选项是Apache和php5-fcgi模块之间的一些超时,但我不知道如何修改它来尝试另一个选项。


编辑:

我在同一台机器上有两个服务器,Apache2(2.4.10)+php5-fcgi(5.6.2)(HTTP端口80,HTTPS端口443)和Nginx(1.6.2)+php5 fcgi(HTTP端口8080)。

使用Apache2测试的同一页面在HTTP和HTTPS上不起作用(顶部描述了错误)。然后,我尝试使用Nginx(相同的webroot,理论上相同的php5-fcgi配置)进入,然后正确运行。

谢谢,

使用fastCGI时,大多数情况下的空闲超时错误是由CGI请求比使用空闲超时参数设置的时间长引起的。如果未设置,默认值为30秒。

来自mod_fastcgi文档:

-空闲超时n(30秒)在中止请求并记录事件(错误处LogLevel)。非活动计时器仅在连接时适用FastCGI应用程序挂起。如果请求排队到应用程序,但应用程序没有响应(通过编写和刷新),则该请求将被中止。如果与应用程序的通信已完成,但与客户端(缓冲响应),则超时不适用。

在日志文件中,你可以看到这样的东西:

[fastcgi:error] FastCGI: comm with server "/var/www/bin/php-fastcgi" aborted: idle timeout (30 sec), referer: http://example.org/script.php

在网络浏览器中,你会收到"内容编码错误"的消息。

为了避免这个错误,可以增加fastCGI配置中的空闲超时。

FastCgiConfig -idle-timeout 900

因此,通过增加空闲超时,您不再需要使用set_time_limit。