PHP SOAP 获取 HTTP 标头时出错


php soap error fetching http headers

我正在开发一个PHP脚本,该脚本通过SOAP连接处理大量数据。如果未遇到任何错误,则脚本总运行时间的估计值为几天。我遇到的问题是脚本将运行一段时间,从一小时到一天不等,然后 SOAP 连接将随着错误"error fetching http headers"而死亡。

我看过很多建议增加default_socket_timeout设置的文章,我已经尝试过了。它没有帮助。我知道它正在工作,因为它在失败之前至少进行了一百次成功的调用。我能做些什么来阻止此错误?

更新
我打印了请求和响应标头,希望在那里看到错误。但看起来他们很好:

HTTP/1.1 200 OK
日期:2013 年 9 月 25 日星期三 21:00:12 GMT
服务器: Apache/2.2.15 (CentOS(
X-Powered-by: PHP/5.3.3
内容长度:516
连接:关闭
内容类型:文本/XML;字符集=UTF-8

就示例代码而言,实际的脚本非常长,但基本前提是:

ini_set('default_socket_timeout', 120);
$client = new SoapClient($wsdl,array(
    'trace' =>true,
    'connection_timeout' => 500000,
    'cache_wsdl' => WSDL_CACHE_BOTH,
    'keep_alive' => true,
));
while(!$finished) {
    $finished = $client->someSoapFunction($data);
}

someSoapFunction()将返回 100 个连接的有效数据,然后随机返回上述错误。它运行的时间小于设置的任一超时。我的 php 或 apache 错误日志中没有收到任何错误。我被难住了。

我知道

这是一个古老的问题,但也许我的解决方案对其他人有用。我遇到了同样的问题,通过在创建 SoapClient 对象时将"keep_alive"参数更改为 false,我的问题得到了解决:

$client = new SoapClient($wsdl,array(
'trace' =>true,
'connection_timeout' => 500000,
'cache_wsdl' => WSDL_CACHE_BOTH,
'keep_alive' => false,
));