繁体   English   中英

php soap错误获取http标头

[英]php soap error fetching http headers

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

我见过很多文章建议增加default_socket_timeout设置,我试过这个。 它没有帮助。 我知道它正在工作,因为它在失败之前至少进行了一百次成功的调用。 有什么办法可以阻止这个错误吗?

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

HTTP / 1.1 200好的
日期:2013年9月25日星期三格林威治标准时间21:00:12
服务器:Apache / 2.2.15(CentOS)
X-Powered-By:PHP / 5.3.3
内容长度:516
连接:关闭
Content-Type:text / 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,
));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM