0

我正在与 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)的原因是它的代码将被广泛分发,所以我需要能够在连接之前以某种方式检查肥皂......

任何帮助深表感谢...

约翰

4

1 回答 1

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();
    } 

}

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

于 2013-06-21T15:05:48.987 回答