1. 程式人生 > 其它 >[喵咪PHP]頁面顯示空白問題

[喵咪PHP]頁面顯示空白問題

#[喵咪PHP]頁面顯示空白問題#

##前言##

哈嘍!大家好啊,喵咪PHP第一次和大家見面了,熟悉的朋友呢也之道喵咪我也開了喵咪Liunx和喵咪Golang這兩個坑目的呢是吧平常遇到的一些問題或者是在學習中的東西好工具分享出來和大家交流溝通,今天要講的問題是大家在PHP開發中常常會遇到的頁面一片慘白啥內容都沒有的問題,喵咪最近也是被一個很奇葩的問題給坑了一下,那麼話不多說那就來和喵咪一起看看為什麼PHP會返回空白頁面呢?

附上:

喵了個咪的部落格:w-blog.cn

PhalApi官網地址:http://www.phalapi.net/

開源中國Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release

##1. 瞭解PHP報錯機制##

其實在平常PhalApi回答各位小夥伴問題的時候常常會有童鞋截了圖問我,怎麼呼叫介面沒有反應呢?

這類問題往往大家對與PHP的報錯機制不是太瞭解導致了使用預設配置在執行出錯了程式結束了並沒有把報錯資訊打印出來但是程式也沒辦法執行下去,其中兩個至關重要的兩個配置在php.ini中,我們一般用如下配置,把所有報錯型別都打印出來:

#錯誤等級,不同的配置會列印不同的錯誤和警告
error_reporting = E_ALL
//是否開啟報錯
display_errors = ON

我們來看一下error_reporting可以設定的引數種類:

E_ALL                  – 所有的錯誤和警告(不包括 E_STRICT)
E_ERROR                – 致命性的執行時錯誤
E_WARNING              – 執行時警告(非致命性錯誤)
E_PARSE                – 編譯時解析錯誤

一般以上就是我們經常用到的

提示:建議開發測試環境使用E_ALL排除所有的錯誤和警告養成良好的編碼習慣,在生產環境時關閉display_errors避免不必要的請求失敗

##2. Nginx這個鍋你說你接不接##

第二個問題就比較有意思了,我們來一同瞭解一下事情的經過

###2.1 事情是這樣的

在工作中做Excel匯出功能,發現了一個問題我匯出的內容只有69條多了就沒有了(原本8000多條記錄),然後直接請求介面之後返回值是一片空白,通過除錯發現200條一下都可以成功匯出多了不行.找了nginx報錯日誌,php日誌都沒有問題

###2.2 問題剖析

是不是很玄學,200條可以多了不行,沒有任何error記錄,更奇怪的是我有一個環境是可以成功匯出的,奇怪吧?

前後懷疑過是不是php執行記憶體是不是給少了,查了一下我給了192MB肯定是夠的,是不是nginx緩衝區給少了,查了下也沒有問題,是不是我使用的excel匯出的姿勢有問題呢?換了兩個類庫也沒問題,那到底是為什麼呢

**排除法:**這個事件中有兩個角色是最大的懷疑物件,Nginx,PHP,我們先使用PHP通過cli的方式請求介面,發現該列印的都ok,那麼所有的矛頭都指向了Nginx了,但是Nginx也沒有錯誤日誌啊,費勁千辛萬苦也沒有找到原因只能到處求助,最後是一個同事的一句話驚醒了夢中人,會不會是許可權問題,我會想起了一件事情Nginx是www許可權開始配好了,後面進行釋出工具部署的時候建立了一個釋出工具的使用者,然後把所有WEB執行的使用者許可權都指向了這個使用者,檢查了一下果真還是www使用者,所以是沒有許可權的問題

###2.3 什麼原理

究竟是什麼原理導致的這個問題,通過分析考證,PHP在列印的時候是實時輸出也就是echo一句就是列印一句,但是Nginx或者說WEB程式並不是這樣的,他們都是把所有的返回結果一併返回,Nginx有一個buff緩衝區大小是64K,當你的頁面返回的文字大小大於64k的時候就會把需要輸出的內容記錄到本地然後在執行結束了一併輸出,但是正好這個時候應為更換了Nginx的執行使用者為釋出使用者,這個時候失去了許可權導致寫不成功就失敗了,然後想要記錄ERROR日誌的時候發現error目錄也沒有許可權也就沒有寫入error日誌

###2.4 請接好我的鍋

會想起一件事情我意識到這個問題的嚴重性,有一次領導說我們的網站怎麼打不開了好多客戶在反應,然後我去查了下伺服器發現Nginx竟然死了,找了好久的error日誌也沒有,最後加了一個監控不了了之,原來都是沒有許可權記錄error日誌的鍋

為什麼Nginx不檢查許可權呢?你就說吧這個鍋你接不接

##3. 總結##

出現了兩個問題一個是匯出Excel的時候出現了截斷的問題,另外一個是Nginx死了無證可查的問題,這都是應為沒有給Nginx賦予許可權的問題,分享出來給大家作為參考,也希望大家不要犯和喵咪一樣的這種錯誤.

最後宣告一下Nginx是一個很好的軟體問題都是喵咪不細心的問題,只是希望寫的幽默一點把鍋甩給了Nginx

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!

PhalApi官網QQ交流群:421032344 歡迎大家的加入!