徹底杜絕PHP的session cookie錯誤

2021-12-29 16:38:01 字數 1892 閱讀 1496

本文討論的是如何徹底杜絕warning: cannot add header information - headers already sent in...... 這種令人莫明其妙的的錯誤。

只要你寫過php**,相信都遇上過這個大多時候都令人莫明其妙的warning吧..今天我們就來搞定它...............

看了php手冊,回答如下:

訊息「warning: cannot send session cookie - headers already sent。。。」或者「cannot add header information - headers already sent。。。」。

函式 header(),setcookie() 和 session 函式需要在輸出流中增加頭資訊。但是頭資訊只能在其它任何輸出內容之前傳送。在使用這些函式前不能有任何(如 html)的輸出。函式 headers_sent() 能夠檢查您的指令碼是否已經傳送了頭資訊。請參閱「輸出控制函式」。

意思是:不要在使用上面的函式前有任何文字,空行,回車,空格等。但。。。問題是,這答案並不令人滿意。因為往往程式在其他php環境下執行卻正常。

首先:這錯誤是怎麼產生的呢?讓我們來看看php是如何處理http header輸出和主體輸出的。

php指令碼開始執行時,它可以同時傳送header(標題)資訊和主體資訊。 header資訊(來自 header() 或 setcookie() 函式)並不會立即傳送,相反,它被儲存到乙個列表中。 這樣就可以允許你修改標題資訊,包括預設的標題(例如 content-type 標題)。但是,一旦指令碼傳送了任何非標題的輸出(例如,使用 html 或 print() 呼叫),那麼php就必須先傳送完所有的header,然後終止 http header。而後繼續傳送主體資料。從這時開始,任何新增或修改header資訊的試圖都是不允許的,並會傳送上述的錯誤訊息之一。

好!那我們來解決它:

笨方法:把錯誤警告全不顯示!

掩耳盜鈴之計,具體方法就不說了 ^_^#

解決方案:

1)適用於有許可權編輯php。ini的人

開啟php。ini檔案(你應試比我清楚你的php。ini在**),找到

output_buffering =改為on或者任何數字。如果是iis6,請一定改為on,不然你的php效率會奇慢。

2)使用虛擬主機,不能編輯php。ini,怎麼辦?

簡單:在你的空間根目錄下建立乙個。htaccess檔案,內容如下:

allowoverride all

php_flag output_buffering on

不幸的情況是:還是不行?全部網頁都不能顯示啦?

那麼,你可以打**罵一通空間商,然後讓他給你把apache的。htaccess allowoverride開啟

3)在php檔案裡解決

ob_start()

啟用output buffering機制。 output buffering支援多層次 -- 例如,可以多次呼叫 ob_start() 函式。

ob_end_flush()

傳送output buffer(輸出緩衝)並禁用output buffering機制。

ob_end_clean()

清除output buffer但不傳送,並禁用output buffering。

ob_get_contents()

將當前的output buffer返回成乙個字串。允許你處理指令碼發出的任何輸出。

原理:output_buffering被啟用時,在指令碼傳送輸出時,php並不傳送http header。相反,它將此輸出通過管道(pipe)輸入到動態增加的快取中(只能在php 4。0中使用,它具有**化的輸出機制)。你仍然可以修改/新增header,或者設定cookie,因為header實際上並沒有傳送。當全部指令碼終止時,php將自動傳送http header到瀏覽器,然後再傳送輸出緩衝中的內容。

徹底杜絕PHP的session cookie錯誤

本文討論的是如何徹底杜絕warning cannot add header information headers already sent in.這種令人莫明其妙的的錯誤。只要你寫過php 相信都遇上過這個大多時候都令人莫明其妙的warning吧.今天我們就來搞定它.看了php手冊,回答如下 訊息...

徹底杜絕PHP的session cookie錯誤

本文討論的是如何徹底杜絕warning cannot add header information headers already sent in.這種令人莫明其妙的的錯誤。只要你寫過php 相信都遇上過這個大多時候都令人莫明其妙的warning吧.今天我們就來搞定它.看了php手冊,回答如下 訊息...

徹底杜絕PHP的session cookie錯誤

本文討論的是如何徹底杜絕warning cannot add header information headers already sent in.這種令人莫明其妙的的錯誤。只要你寫過php 相信都遇上過這個大多時候都令人莫明其妙的warning吧.今天我們就來搞定它.看了php手冊,回答如下 訊息...