2012-01-12 65 views
4

我使用一些PHP手冊的代碼來進行異常測試,但得到一些奇怪的消息。php引發異常被捕獲,但仍然出現錯誤消息

這裏是代碼:

function inverse($x) { 
    if (!$x) { 
     throw new Exception('Division by zero.'); 
    } 
    else return 1/$x; 
} 

try { 
    echo inverse(5) . "\n"; 
    echo inverse(0) . "\n"; 
} catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 

// Continue execution 
echo 'Hello World'; 

這裏是輸出:

0.2 
(!) Exception: Division by zero. in /var/www/OOPlearing/slash.php on line 10Call Stack#TimeMemoryFunctionLocation10.0002330188{main}()../slash.php:020.0002330232inverse($x = 0)../slash.php:17Dump $_SERVER$_SERVER['HTTP_HOST'] =string 'localhost' (length=9)$_SERVER['SERVER_NAME'] =string 'localhost' (length=9)Dump $_GETVariables in local scope (#2)$x =int 0 
Caught exception: Division by zero.Hello World 

這是奇怪的是,雖然異常被抓住了,但異常消息仍然在...

我在php.ini中的一些本地設置:

error_reporting = E_ALL & ~E_DEPRECATED 
display_errors =On 
display_startup_errors = Off 
log_errors = Off 
...... 
html_errors = On 

我的筆記本電腦:

ubuntu11.04 
mysql Ver 14.14 Distrib 5.1.54 
PHP 5.3.5-1 

更新(2012年1月16日)這是Xdebug擴展,導致這樣的錯誤outputs.The Xdebug的默認顯示堆棧跟蹤誤差conditions.For誰想要禁用它可以下面做說明:

xdebug_disable();//put it on the header of your code,like cofig file. 

more details

+0

做喲你嘗試設置'display_errors'關閉? – jere 2012-01-12 12:23:27

+2

錯誤報告的轉向不是問題的解決方案;) – rkosegi 2012-01-12 12:25:37

+1

我複製粘貼你的代碼,它只顯示 0。2 遇到異常:除以零。 Hello World。 所以沒問題 – rkosegi 2012-01-12 12:28:25

回答

3

當你的try/catch()的代碼塊,那麼你不會得到Uncaugh的」致命錯誤例外「。致命錯誤將導致腳本在錯誤點停止執行。既然你發現了這個異常,它就會按照你所說的去做:回顯字符串+錯誤信息,然後繼續執行到「Hello World!」。如果有任何錯誤報告由於INI設置而變得更加冗長,如堆棧跟蹤打印輸出。

+0

,所以我想知道哪些ini設置會導致額外的錯誤報告......我應該在這裏粘貼我的ini設置的完整列表? – zhkzyth 2012-01-13 04:58:57

+0

嘗試track_errors =關在您的php.ini – ddubs 2012-01-13 13:13:07

+0

相同的結果...也許xdeug影響了錯誤output.i將嘗試稍後禁用它...無論如何,謝謝... – zhkzyth 2012-01-14 07:34:27

1

如果您不想顯示錯誤,請關閉error_reporting和display_error。然後,它會告訴你只有該異常打印出

0

設置display_errors = off會給你你想要的行爲的消息,但要知道,你不會得到任何錯誤消息或警告,所以,除非你是在一個生產環境強烈建議你離開這個。

如果你不想關閉錯誤報告對所有的PHP,你可以做下列操作之一:

  • 設置<?php ini_set('display_errors', 0); ?>在腳本的頂部。
  • 創建一個虛擬主機爲您的網站(如果你不已經有一個),並創建一個.htaccess和包括線php_flag display_errors "1"

希望這有助於

3

如果您不希望禁用的XDebug你不希望出現在跟蹤消息,你可以在你的php.ini關閉異常跟蹤的顯示與

xdebug.show_exception_trace = 0 

相關問題