一. 前言
專案是一個呼叫系統,老闆買的專案,別問為什麼買,有錢任性。專案用apache2.2+php5.4+mysql5.1在一臺機器上部署,底層voip使用的asterisk1.8。
因為需要基於這套系統做業務開發,程式碼部署和開發不能在這臺機器上繼續操作,所以只能將php的專案重新搭建部署到另一臺機器,PHP原始碼被直接輸出就是這次搭建時遇到的一個問題。
二. 問題表現&解決
可以看到第一行PHP原始碼被直接輸出,第二行是介面正常的json響應資料
最開始的時候我猜測檔案編碼問題導致,然後找到這段原始碼檔案vim開啟檔案,使用set fileencoding檢視檔案編碼如下:
可以看到檔案編碼是utf-8,只有註釋亂碼了,不過我壓根沒有往註釋身上想,所以我只改動了function內的程式碼,沒刪除改動/**/裡的註釋,但恰恰是這個/**/中的註釋導致原始碼被輸出這個問題。
然後就是各種除錯,各種擴充套件比較,檢視日誌,一個問題一個問題解決,最後日誌中所有的報錯都解決了,但是原始碼被輸出這個問題還在,我懵了。
我又重新把眼光投在這個亂碼的檔案上,我比較了一下源機器的檔案和我部署的這個檔案,我發現兩個檔案編碼不一樣。我這個程式碼檔案來自git,也是我從源機器上ftp拉取的程式碼。這個編碼問題我猜測是phpstorm造成的。
最後我刪除了註釋再次訪問。
響應正常了
三. 總結
1.程式碼中有亂碼問題,哪怕亂碼的是註釋也是會出問題的,所以檔案中有亂碼必須要處理。
2.搭建環境儘量無限接近原來系統的環境,因為這次環境的差異也導致我錯誤判斷了問題原因。
3.我還發現PHP/**/的註釋會產生這個問題,但//的註釋不會出現這個問題
本作品採用《CC 協議》,轉載必須註明作者和本文連結