今天客戶說他在安裝模板時提示Warning: Cannot modify header information - headers already sent by( ....),出現這個原因PHP手冊有涉及到,回答如下:消息“Warning: Cannot send session cookie - headers already sent…”或者“Cannot add/modify header information - headers already sent…”。 函數 header(),setcookie() 和 session 函數需要在輸出流中增加頭信息。但是頭信息只能在其它任何輸出內容之前發送。在使用這些函數前不能有任何(如 HTML)的輸出。函數 headers_sent() 能夠檢查您的腳本是否已經發送了頭信息。請參閱“輸出控制函數”。 意思是:不要在使用上面的函數前有任何文字,空行,回車,空格等。
這錯誤是怎么產生的呢?讓我們來看看PHP是如何處理HTTP header輸出和主體輸出的。
PHP腳本開始執行時,它可以同時發送header(標題)信息和主體信息。 Header信息(來自 header() 或 SetCookie() 函數)並不會立即發送,相反,它被保存到一個列表中。 這樣就可以允許你修改標題信息,包括缺省的標題(例如 Content-Type 標題)。但是,一旦腳本發送了任何非標題的輸出(例如,使用 HTML 或 print() 調用),那么PHP就必須先發送完所有的Header,然后終止 HTTP header。而后繼續發送主體數據。從這時開始,任何添加或修改Header信息的試圖都是不允許的,並會發送上述的錯誤消息之一。
好!那我們來解決它:笨方法:把錯誤警告全不顯示! 掩耳盜鈴之計
error_reporting(E_ERROR | E_PARSE); 這里不要顯示E_WARNING即可
打開 php.ini 然后把 output_buffering 設為 On 。重起nginx,OK。
參考資料:https://blog.csdn.net/besily/article/details/5396268