2011-07-07 61 views
10

在PHP中,如果您嘗試實例化一個新SoapClient和WSDL不可訪問(服務器停機或其他),一個PHP致命錯誤被拋出:SoapClient的錯誤後備

Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from ' http://example.com/servlet/app/SomeService?wsdl ' : failed to load external entity " http://example.com/servlet/app/SomeService?wsdl "

的致命錯誤據我所知,PHP無法恢復。

有沒有辦法從這回退?莫名其妙地避免這個致命錯誤?


編輯:我應該說,我在PHP 5.2運行,如果這有什麼差別。

回答

11

這已經討論時恢復,但你可以給用戶提供更好的體驗:

拉斯穆斯自己提出以下解決方案:

<?php 
try { 
    $x = @new SoapClient("non-existent.wsdl",array("exceptions" => 1)); 
} catch (SoapFault $E) { 
    echo $E->faultstring; 
} 
echo "ok\n"; 
+0

不幸的是,這個解決方案在PHP 5.3.10中似乎不起作用。 – pthurmond

+0

我把它逐字地拷貝到一個新文件中,它沒有得到回聲「好」;部分。 – pthurmond

+2

但是,當我向下看時,我確實發現了關於禁用xdebug的注意事項,並允許上述操作。 – pthurmond

0

請參見本主題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."; 
    } 
} 
+0

沒錯,但我期待完全避免了致命的錯誤。 –

+0

最好的做法是嘗試抓住肯定。 – JDuarteDJ