在日常的網(wǎng)站開(kāi)發(fā)中,我們經(jīng)常會(huì)使用Nginx作為Web服務(wù)器,并配合PHP作為后端語(yǔ)言。然而有時(shí)候我們會(huì)發(fā)現(xiàn),即使PHP中存在錯(cuò)誤,Nginx也不會(huì)提示任何信息,這讓我們調(diào)試程序非常困難。本文將介紹一些解決方法,使Nginx能夠提示PHP錯(cuò)誤信息。
一、理解錯(cuò)誤報(bào)告及搜集方法
在部署服務(wù)器的過(guò)程中,我們習(xí)慣性地關(guān)閉了PHP的錯(cuò)誤輸出,這是因?yàn)镻HP的錯(cuò)誤信息可能會(huì)導(dǎo)致安全隱患暴露,或?qū)е滦畔⑿孤?。但是在開(kāi)發(fā)過(guò)程中,我們需要這些錯(cuò)誤信息來(lái)定位問(wèn)題和調(diào)試程序。
解決這一問(wèn)題的方法之一是打開(kāi)PHP的錯(cuò)誤輸出。在PHP中我們可以設(shè)置錯(cuò)誤日志級(jí)別或者即時(shí)報(bào)告錯(cuò)誤。同時(shí),我們也可以在Nginx的配置文件中添加一些選項(xiàng)來(lái)顯示PHP錯(cuò)誤信息。
二、Nginx 配置文件中的 PHP 錯(cuò)誤設(shè)置
打開(kāi)Nginx服務(wù)器的配置文件,一般為/etc/nginx/nginx.conf
,找到http{}
塊,添加如下配置:
server { # server settings ... # server block location rules ... # php-fpm status check location ~ ^/(status|ping)$ { access_log off; # php-fpm settings fastcgi_param PHP_VALUE "error_reporting=E_ALL"; include fastcgi_params; fastcgi_pass unix:/run/php/php7.4-fpm.sock; } # php error logs location ~ .php$ { fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php_error.log"; include fastcgi_params; fastcgi_pass unix:/run/php/php7.4-fpm.sock; } # error pages error_page 404 /404.html; error_page 500 502 503 504 /50x.html; # static files location ~* .(jpg|jpeg|gif|png|css|js|ico)$ { expires 7d; access_log off; } # disable direct access to .ht files location ~ /.ht { deny all; } }
其中,fastcgi_param PHP_VALUE
用于向Nginx服務(wù)器請(qǐng)求的PHP進(jìn)程傳遞錯(cuò)誤信息。 error_reporting=E_ALL
表示輸出所有錯(cuò)誤級(jí)別的信息。fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php_error.log";
表示將PHP錯(cuò)誤信息輸出到/var/log/nginx/php_error.log
文件中。
更改完配置文件后,重新加載Nginx服務(wù)器:
sudo systemctl reload nginx
三、PHP 配置文件中的錯(cuò)誤設(shè)置
PHP的配置文件一般為/etc/php/7.4/fpm/php.ini
,找到error_reporting
這一行,將其設(shè)置為顯示所有的錯(cuò)誤信息:
error_reporting = E_ALL
然后找到display_errors
這一行,將其設(shè)置為On
,這樣就可以在網(wǎng)頁(yè)上顯示所有的PHP錯(cuò)誤信息了:
display_errors = On
然后保存文件并重啟PHP-FPM:
sudo systemctl restart php7.4-fpm
四、總結(jié)
配置Nginx Web服務(wù)器提示PHP錯(cuò)誤信息隱藏的技巧在于,從Nginx服務(wù)器和PHP進(jìn)程兩個(gè)方面來(lái)設(shè)置。這可以幫助開(kāi)發(fā)者快速找出代碼中的錯(cuò)誤,有助于快速修復(fù)問(wèn)題并提高代碼質(zhì)量。