检查SoapClient是否存在

时间:2013-06-21 13:36:59

标签: soap exception-handling error-handling try-catch fatal-error

我正在与PHP中的错误检测作斗争......

我有一个简单的函数,它使用SoapClient从我的另一台服务器获取数据。相关部分是:

$options = array(
'uri' => 'https://www.php-web-host.com',
'location' => 'https://www.php-web-host.com/API/Country.php',
'trace' => 1);

$client = new SoapClient(NULL, $options);
$CountryCode = strtolower($client->GetCountryCode($_SERVER["REMOTE_ADDR"]));

我目前遇到的问题是,如果运行此代码的服务器没有安装SOAP,那么我会收到500服务器错误(我没有检查过,但我猜测到了实际的PHP问题是致命的例外吗?)

我尝试在try / catch块中包装上面的内容,但显然它不会抛出异常。我也尝试过set_error_handler等,但是我无法“抓住”这个错误。

我需要捕获它(而不是仅仅安装SOAP)的原因是它的代码将被广泛分发,所以我需要能够在连接之前以某种方式检查肥皂...

非常感谢任何帮助...

约翰

1 个答案:

答案 0 :(得分:0)

好的,所以我设法通过在How do I catch a PHP Fatal Error使用periklis示例来解决我的问题。

该示例使用register_shutdown_function,该页面在页面终止时(正确或由于错误)被调用。

register_shutdown_function('shutdownFunction');

function shutdownFunction()
{

    $error = error_get_last();

    // check if this error was related to my code, if not, ignore it
if ( ($error['type'] == 1) && (strstr(strtolower($error['message']), 'soapclient') ) )
{

            print "<h1 style=\"color:red;\">ERROR!</h1>Your server does not appear to have SOAP installed. SOAP is required for this functionaliy";
    exit();
    } 

}

这似乎对我有用......幸福!