【问题标题】:php soap error fetching http headersphp soap错误获取http标头
【发布时间】:2016-12-17 02:41:33
【问题描述】:

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

【问题讨论】:

  • 有关您编写的代码问题的问题必须在问题本身中描述具体问题 - 并包括重现问题的有效代码。

标签: php soap connection-timeout


【解决方案1】:

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

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

【讨论】:

  • 据我所知,此解决方案仅适用于 php >= 5.4,因为在较低版本中,keep_alive 选项不可用。但是它应该在您的 Web 服务器的配置中可用
  • 非常感谢,经过 3 天的搜索,终于解决了我们的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
相关资源
最近更新 更多