我正在开发一个通过 SOAP 连接处理大量数据的 PHP 脚本。如果没有遇到任何错误,脚本的总运行时间估计需要几天。我遇到的问题是脚本会运行一段时间,从一小时到一天不等,然后 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
连接:关闭
Content-Type :文本/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 错误日志中没有错误。我难住了。