【问题标题】:Second soap call to self made soap server makes apache produce a segfault对自制肥皂服务器的第二次肥皂调用使 apache 产生段错误
【发布时间】:2012-05-03 15:59:26
【问题描述】:

大家好,我已经为此苦恼了两周。

问题是我做了一个肥皂服务,似乎工作正常。当我要求它显示它的函数时,它会全部返回它们等等。但是当我尝试向服务器调用两个函数时,我得到一个段错误:

'[notice] child pid 13950 exit signal Segmentation fault (11)'

但是当我分别调用这两个函数时,它们会起作用。我为此搜索了一周并尝试了不同的 wsdl 格式,但唯一出现的可能是 php 错误或 wsdl 中的一些错误(这似乎不太可能,因为我的验证器找不到错误)。

浏览器给了我这个回应:

错误 324 (net::ERR_EMPTY_RESPONSE)

我目前正在运行 php 版本 5.3.6 并且还尝试了 5.2.17 以尝试消除可能的 php 错误。但他们都给出了同样的错误。

办公室里没有人知道如何解决这个问题,因为“一切都会好起来的”。
谁能帮我找到正确的方向?

客户: (这段代码导致 apache 崩溃)

ini_set('soap.wsdl_cache_enabled', 0); 
ini_set('soap.wsdl_cache_ttl', 0);
try{
    $soap = new SoapClient("http://localhost/virtueleincasso.wsdl", array("exceptions" => 1));
    $password = $soap->virtuele_incasso_login('user', 'pass');       
    $status = $soap->get_status($password , 1060);
}catch (SoapFault $exception){
    echo $exception->faultstring;
}

服务器:

ini_set('soap.wsdl_cache_enabled', 0); 
ini_set('soap.wsdl_cache_ttl', 0);
$server = new SoapServer(DIR_ROOT."/virtueleincasso.wsdl");
$server->setClass('PP_Api');
$server->handle();
die();

解决方案:我使用了一个 die 函数来阻止服务器函数返回一个空字符串。我通过将其更改为退出函数来修复它。

【问题讨论】:

  • Apache 段错误?是时候 p/strace 了,不是吗?在调试器中启动它,看看到底发生了什么。
  • 要去试试。这个 p/strace 的新手。立即谷歌搜索。
  • 我也会在一台单独的机器上尝试,以防你正在运行的服务器出现问题。

标签: php apache soap wsdl segmentation-fault


【解决方案1】:

我在使用soap 扩展的多个PHP 进程中遇到了类似的问题。这似乎是处理 WSDL 缓存的方式中的一个错误。我还尝试通过 ini_set() 调用禁用它,就像你没有成功一样。我最终在我的案例中找到了解决方法。我需要将cache_wsdl 选项设置为WSDL_CACHE_NONE

return new SoapClient("http://localhost/virtueleincasso.wsdl", array(
    "exceptions" => 1,
    "cache_wsdl" => WSDL_CACHE_NONE
));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多