我正在研究一个通过SOAP连接处理大量数据的PHP脚本。如果脚本没有遇到任何错误,则估计其总运行时间为几天。我遇到的问题是脚本将运行一段时间,从一个小时到一天不等,然后SOAP连接将因错误"error fetching http headers"而消失。

我看过很多文章建议增加 default_socket_timeout 设置,而我已经尝试过了。它没有帮助。我知道它是有效的,因为它在失败之前至少进行了一百次成功的调用。我有什么办法可以阻止此错误?

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



就示例代码而言,实际的脚本太疯狂了,但是基本前提是:

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,
));

10-06 14:34
查看更多