鍍金池/ 問答/PHP  Linux/ php異常無法捕捉?

php異常無法捕捉?

在文件a.php中引入文件b.php,并在a.php中執(zhí)行b.php中的一個函數(shù)c。此時c拋出異常,而在a中無法捕獲。環(huán)境:nginx,php-fpm。
nginx直接502

不好意思。一下貼出代碼和錯誤:
a.php中代碼

clipboard.png

nginx 錯誤日志

clipboard.png

此時在b中的pdo拋出了異常,這里是捕捉不到的,但是如果我在b.php文件的代碼中直接catch(一下是b.php的代碼):

clipboard.png
另外,php-fpm沒有任何錯誤日志。

回答
編輯回答
誮惜顏

能貼代碼就不要貼圖?。。。。。。。?/code>

要做啥說明你可以用注釋?。。。。?!

從你的問題我給你幾個建議:

  1. 看nginx的錯誤日志,nginx一般能給你一個很好的反饋。
  2. 再看php-fpm的錯誤日志記錄,基本上能定位PHP的錯誤。
  3. 通常來說你這種是程序出錯了,我建議你用catch(Error $e)同時捕獲錯誤,如果是報錯的話,不用Error是捕獲不到的,Exception只能捕獲異常。

以上三點(diǎn),切記切記。


更新一下回答:

從你代碼可見,你在用

try {
} catch(Exception $e) {
}

這里的Exception類不知道是你自己定義的還是框架里的,不管這兩種情況是輸入哪一種,假設(shè)你b.php中pdo所拋出的異常不是繼承你a所定義的這個異常類,你在a中肯定無法捕獲到。
所以你可以用\Exception試一下,為PHP中所有異常類的基類。
另外,我把

catch(Error $e)

加大一點(diǎn),你用這個:

catch(Error $e)

試一下看看到底程序有沒有錯啊。
另外:

能貼代碼就不要貼圖?。。。。。。?!

2018年5月19日 03:38
編輯回答
厭遇

Exception異常和Error錯誤都需要捕獲

try {
    echo asdfasdf('1'); //未定義的函數(shù)
    throw new Exception('asdasd');
} catch (Exception $e) {
    echo $e->getMessage();
} catch (Error $e) { 
    echo $e->getMessage();
}

光捕獲異??隙ú恍械?/p>

2018年4月24日 16:58
編輯回答
絯孑氣

php 7以上版本可以用Throwable

try {
    echo 'php7';
} catch(Throwable $e){
    throw new Exception('異常');
}

官方文檔

2017年5月15日 06:35
編輯回答
骨殘心

說的是啥啊,圖片都沒有

2017年11月2日 00:36