例外没被抓住

时间:2010-09-01 23:16:00

标签: php exception-handling error-handling

我在网页上有以下PHP代码:

$wsdl_url = "someURL?wsdl";
try {
    $client = new SoapClient($wsdl_url, array('login' => 'mylogin','password' => 'mypassword'));
    $client->myWebMethod();  // <-- problem call
} catch (Exception $e) {
    echo "none";
}

这是对Web服务的基本调用。问题是当行$client->myWebMethod()上出现错误时,不会打印echo "none"。实际上,catch块中没有任何内容运行。因此,我不认为这个例外被抓住了。

网页上显示致命错误。

问题:有关为何发生这种情况的任何想法?我期望使用此代码捕获和处理所有异常。但我得到的是页面上显示致命错误。也许Web服务的处理方式不同?

编辑:错误是它缺少一堆必需的参数。如果我添加参数,调用工作正常。我故意省略参数来获取错误,所以我知道如何处理它。

错误类似于:致命错误:SOAP-ERROR:对象没有'myparameter1'

提前致谢。

2 个答案:

答案 0 :(得分:2)

今天早上我为Drupal运行一个需要外部SOAP Web服务的自定义模块时遇到了同样的问题。说实话,我不太确定我是如何解决这个问题的。

事实证明,完全是关于清除与相应WSDL有关的Web服务器缓存。在 tmp / 文件夹中,您会找到名为 wsdl-yourservice-etc 的各种文件。删除它们应该没问题。如果没有,问题在于代码,更具体地说,是传递给WSDL的参数的顺序和语法。

我希望我能帮忙。

答案 1 :(得分:1)

不幸的是,这不是一个可捕获的错误。

但是,您可以在尝试实例化之前检查soap扩展是否已加载,方法是调用get_loaded_extensions

if  (in_array('soap', get_loaded_extensions())) {
    // it's loaded!
}