PHP 中的 SoapClient 错误回退
Posted
技术标签:
【中文标题】PHP 中的 SoapClient 错误回退【英文标题】:SoapClient error fallback in PHP 【发布时间】:2011-09-30 06:54:06 【问题描述】:在 php 中,如果您尝试实例化一个新的 SoapClient
,并且无法访问 WSDL(服务器关闭或其他),则会引发 PHP 致命错误:
致命错误:SOAP-ERROR:解析 WSDL: 无法从 'http://example.com/servlet/app/SomeService?wsdl' : 未能加载外部实体 "http://example.com/servlet/app/SomeService?wsdl"
据我所知,PHP 中的致命错误无法恢复。
有什么办法可以回退吗?能否以某种方式避免这种致命错误?
编辑:我应该说我在 PHP 5.2 上运行,如果有什么不同的话。
【问题讨论】:
【参考方案1】:这已经讨论过了:
https://bugs.php.net/bug.php?id=47584 http://www.php.net/manual/en/class.soapclient.php#104046拉斯穆斯本人提出了以下解决方案:
<?php
try
$x = @new SoapClient("non-existent.wsdl",array("exceptions" => 1));
catch (SoapFault $E)
echo $E->faultstring;
echo "ok\n";
【讨论】:
不幸的是,这个解决方案似乎不适用于 PHP 5.3.10。 我将它逐字复制到一个新文件中,但它没有得到回显“Ok”;部分。 但是,当我往下看时,我确实找到了关于禁用 xdebug 的注释,并且允许上述操作。【参考方案2】:看到这个话题How do I catch a PHP Fatal Error
基本上您无法从致命错误中恢复,但您可以在注册关闭功能时为用户提供更好的体验
register_shutdown_function('handleShutdown');
function handleShutdown()
$error = error_get_last();
if($error !== NULL)
echo "Sorry for the inconvenience, an error just occurred.";
【讨论】:
最佳实践是肯定地尝试捕获。以上是关于PHP 中的 SoapClient 错误回退的主要内容,如果未能解决你的问题,请参考以下文章
PHP - SoapClient::SoapClient 无法打开流:连接被拒绝
是否可以将元素名称映射到 php 类(SoapClient)
PHP SoapClient over selfsigned certificate,SOAP-ERROR:解析WSDL:无法从'https://加载