2016-10-25 17 views
0

我正在運行一個php腳本,針對最近運行良好的設備,直到最近當特殊情況導致致命錯誤。如何處理和使用致命錯誤

$soapClient = new SoapClient("/var/www/blah/someWSDL.wsdl", array('trace'=>true, 'exceptions'=>true,'location'=>"https://hostName:8443/axl",'login' => "userName",'password'=> "password")); 

$response = $soapClient->getLine(array("routePartitionName"=>"PT-INHOUSE", "pattern"=>"$row[callingPartyNumber]")); 
echo "<TR><TD class='body'>" . $response->return->line->description . "</TD><TD class='body'>" 

所以,這將適用於任何情況下,$響應產生的輸出。但是,有些情況下它不會(非常少見)。在這些情況下,這是產生的;

Fatal error: Uncaught SoapFault exception: [soapenv:Server] Item not valid: 

在閱讀這個問題時,聽起來像我應該做的是「捕捉」錯誤。如果發生致命錯誤,我想繞過$ response-> return-> line-> description的回顯,並用「找不到」等文本替換此輸出。這可能與if語句有關,例如「如果發生致命錯誤,輸出這個」?從我讀過的內容來看,這不是推薦的東西。任何幫助表示讚賞。

+1

可能重複:http://stackoverflow.com/questions/6374345/php-soapfault-not-caught-by-異常處理程序 –

+0

沒有答案是普遍有效的。理想情況下,您應該確定爲什麼會拋出「SoapFaul」:無論您身邊是邏輯錯誤,還是無法控制的運行時問題。 –

+0

嗨,Alvaro,這不是一個邏輯錯誤。我知道錯誤發生的原因,相信與否,完全正常。我從數據庫生成報告,然後使用數據庫中的對象在另一個數據庫中搜索。但是,第二個數據庫中的對象可能不再作爲正常的業務過程。 – Kimomaru

回答

2

一般說來,你應該通過檢查出現錯誤的條件來避免錯誤,並避免這些錯誤。如果你不能避免錯誤,請使用這種結構:

try { 
    // code that produces errors 
} catch (Exception $e) { 
    echo $e -> getMessage(); 
    echo "Nothing found."; 
} 

更多信息:http://www.w3schools.com/php/php_exception.asp

+1

我建議不要僅僅爲了打印而捕獲異常。沒有明顯的好處,你只是放棄了相關的功能 - 例如,你不能有一個站點範圍的錯誤處理程序來記錄或正確報告它。 –

+0

這是一個好點,但總的來說,這是解決方案。一個側面的實施是最好的結果。此外,檢查錯誤類型並正確處理是必要的。 – NikxDa

+0

我明白你在說什麼。一些上下文。該腳本首先進入MySQL數據庫並搜索最長距離呼叫的分機列表。但是,該數據庫不包含撥打電話的用戶的姓名。查詢的第二部分從第一個數據庫擴展並檢查第二個數據庫中的用戶名。但是,正如我所發現的那樣,擴展可能實際上從第二個數據庫中刪除,因爲用戶離開或擴展已停用。來自第一個數據庫輸出的數據仍然非常重要,但我不能做第二個查詢。 – Kimomaru