按照之前的印象,error_reporting(0)屏蔽不了php的Fatal error級別的錯誤。
可是今天我遇到了一個問題才發現,它居然能夠屏蔽任何錯誤,包括Fatal error,瀏覽器會看不到500錯誤碼,顯示的是200,php-fpm下的php錯誤日誌裏沒有任何輸出,nginx下的錯誤日誌裏也沒有任何輸出。php
發現的過程是這樣的,下載了一個開源代碼,直接瀏覽器運行顯示空白。看各類日誌都沒有錯誤信息,使用php-xdebug配合vscode,纔看獲得在首頁獲取session在鏈接數據庫,我沒有配置任何數據庫,所以new PDO的時候鏈接不上,報的是Fatal error錯誤。nginx
通過下面這幾句測試,能夠看到確實屏蔽了Fatal error,語法錯誤屏蔽不了數據庫
<?php error_reporting(0); new aaa(); ?> <?php error_reporting(0); new PDO(); ?>
個人測試環境爲ubuntu,PHP版本是7.4,日誌配置了下面這些,全均可以無視掉
/etc/php/7.4/fpm/pool.d/www.conf
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/php/www-error.log
php_admin_flag[log_errors] = onubuntu
/etc/php/7.4/fpm/php.ini
display_errors = On瀏覽器