我正在处理一个通过SOAP连接处理大量数据的PHP脚本。如果没有遇到任何错误,该脚本的总运行时间估计为几天。我遇到的问题是,脚本将运行一段时间,从一小时到一天不等,然后SOAP连接将因错误“error fetching http headers”而中断。
我看过许多文章建议增加“default_socket_timeout”设置,我已经尝试过了,但没有帮助。我知道它在工作,因为它至少会成功调用一百次,然后才会失败。有什么方法可以防止这个错误吗?
更新: 我打印出请求和响应头,希望能在其中看到错误。但看起来它们都很好:
HTTP/1.1 200 OK Date: Wed, 25 Sep 2013 21:00:12 GMT Server: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.3.3 Content-Length: 516 Connection: close Content-Type: text/xml; charset=UTF-8
就示例代码而言,实际脚本非常长,但基本原理如下:
我看过许多文章建议增加“default_socket_timeout”设置,我已经尝试过了,但没有帮助。我知道它在工作,因为它至少会成功调用一百次,然后才会失败。有什么方法可以防止这个错误吗?
更新: 我打印出请求和响应头,希望能在其中看到错误。但看起来它们都很好:
HTTP/1.1 200 OK Date: Wed, 25 Sep 2013 21:00:12 GMT Server: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.3.3 Content-Length: 516 Connection: close Content-Type: text/xml; charset=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 错误日志中没有发现任何错误。我感到困惑。