記一次檔案亂碼導致PHP原始碼被直接輸出問題

嘵東發表於2020-08-21

一. 前言

  專案是一個呼叫系統,老闆買的專案,別問為什麼買,有錢任性。專案用apache2.2+php5.4+mysql5.1在一臺機器上部署,底層voip使用的asterisk1.8。
  因為需要基於這套系統做業務開發,程式碼部署和開發不能在這臺機器上繼續操作,所以只能將php的專案重新搭建部署到另一臺機器,PHP原始碼被直接輸出就是這次搭建時遇到的一個問題。

二. 問題表現&解決

記一次檔案亂碼5導致PHP莫名輸出原始碼問題

可以看到第一行PHP原始碼被直接輸出,第二行是介面正常的json響應資料

最開始的時候我猜測檔案編碼問題導致,然後找到這段原始碼檔案vim開啟檔案,使用set fileencoding檢視檔案編碼如下:

記一次檔案亂碼導致PHP原始碼被直接輸出問題

    可以看到檔案編碼是utf-8,只有註釋亂碼了,不過我壓根沒有往註釋身上想,所以我只改動了function內的程式碼,沒刪除改動/**/裡的註釋,但恰恰是這個/**/中的註釋導致原始碼被輸出這個問題。
    然後就是各種除錯,各種擴充套件比較,檢視日誌,一個問題一個問題解決,最後日誌中所有的報錯都解決了,但是原始碼被輸出這個問題還在,我懵了。
    我又重新把眼光投在這個亂碼的檔案上,我比較了一下源機器的檔案和我部署的這個檔案,我發現兩個檔案編碼不一樣。我這個程式碼檔案來自git,也是我從源機器上ftp拉取的程式碼。這個編碼問題我猜測是phpstorm造成的。

記一次檔案亂碼導致PHP原始碼被直接輸出問題

最後我刪除了註釋再次訪問。

記一次檔案亂碼導致PHP原始碼被直接輸出問題

響應正常了

三. 總結

1.程式碼中有亂碼問題,哪怕亂碼的是註釋也是會出問題的,所以檔案中有亂碼必須要處理。
2.搭建環境儘量無限接近原來系統的環境,因為這次環境的差異也導致我錯誤判斷了問題原因。
3.我還發現PHP/**/的註釋會產生這個問題,但//的註釋不會出現這個問題

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章