借著騰訊云的活動(dòng)筆者成功租賃了一臺(tái)系統(tǒng)為Windows Server 2012 R2的服務(wù)器,目前服務(wù)端構(gòu)成是IIS+PHP+MySQL。不過(guò)最近在使用PHP操作MySQL數(shù)據(jù)庫(kù)的時(shí)候遇到了問(wèn)題。有時(shí)會(huì)出現(xiàn)“500 – 內(nèi)部服務(wù)器錯(cuò)誤”,如下圖。

但是問(wèn)題來(lái)了,實(shí)際上PHP代碼在本地測(cè)試的時(shí)候(Windows10+Apache+PHP+MySQL)卻正常,沒(méi)有報(bào)錯(cuò)。如下圖,同樣的代碼和相同的參數(shù),訪問(wèn)同樣的數(shù)據(jù)庫(kù)。

看樣子是IIS+PHP的組合出了問(wèn)題。為了解決問(wèn)題,我們要排除500的錯(cuò)誤可能是哪些,根據(jù)查閱的資料,筆者首先把IIS本身可能會(huì)產(chǎn)生500錯(cuò)誤的地方全部進(jìn)行了排查,比如讀寫(xiě)權(quán)限等等。那么剩下的問(wèn)題可能就出在php上面了。進(jìn)一步查閱資料,有人在之前遇到了類似的情況,最后是通過(guò)對(duì)PHP工作目錄下的php.ini進(jìn)行參數(shù)的修改解決的。php.ini中需要修改的內(nèi)容如下(修改或者添加):
display_errors=On error_log="C:\windows\Temp\php-5.x.yy_errors.log" error_reporting = E_ALL fastcgi.logging = 0 html_errors=On log_errors = On

500錯(cuò)誤終于是沒(méi)了,然后出現(xiàn)了新的問(wèn)題,What???PHP什么時(shí)候用變量要定義了(扶額)……
只能硬著頭皮繼續(xù)找去掉解決方案,最終找到了兩種解決方案:
一,修改php.ini
error_reporting = E_ALL & ~E_NOTICE register_globals = On
這個(gè)問(wèn)題其實(shí)主要出在error_reporting的參數(shù),下面的register_globals筆者在php.ini中沒(méi)有找到(筆者使用的是php7),不添加也沒(méi)有問(wèn)題。
二,在php文件的頭部添加如下代碼
ini_set("error_reporting","E_ALL & ~E_NOTICE");
這個(gè)方案適合沒(méi)有php.ini讀寫(xiě)權(quán)限或者不想進(jìn)行ini配置的情況,也能夠解決問(wèn)題。
再次訪問(wèn)相同的頁(yè)面,終于沒(méi)有500錯(cuò)誤和未定義變量的提示了,沒(méi)有比無(wú)報(bào)錯(cuò)更讓人淚流滿面的事情了。

無(wú)天博客
掃一掃加微信 

最新評(píng)論
通過(guò) systemctl 管理 firewalld 服務(wù): # 啟動(dòng)防火墻 systemctl start fire
firewalld 常用命令: # 查看當(dāng)前狀態(tài) firewall-cmd --state # 查看所有規(guī)則 f
轉(zhuǎn)自寶塔平臺(tái),留存?zhèn)溆?/span>
來(lái)源通義千問(wèn)
$viewrnd=rand(2,5); 這個(gè)是重點(diǎn)
多年前親測(cè)有用,現(xiàn)在你只能網(wǎng)上再找找了,注意版本號(hào)
親測(cè)無(wú)效。。
復(fù)制了兩段代碼后直接前后臺(tái)都你的網(wǎng)站遇到致命錯(cuò)誤。。。