下面是我自己面臨的問題,我不是去測試函數遇到的,我是在換服務器的時候遇到的(由VPS轉到hostgator),然后換主題激活時遇到這個問題的,才開始一直以為是wordpress4.0的兼容性問題,去試驗3.9版本的問題依舊,所以試著用互聯(lián)網上各種文章解決,不幸的是試驗了很多帖子的方法,都失敗了,最后仔細嘗試每一個不同的方法才得以成功,最后得出是空白行和編碼問題,在此也希望把這個帖子和問題描述更加詳細一點,希望節(jié)省大家的時間.
下面原理介紹有點深奧可以略過,本人自己也看不懂就知道是那么回事.
近幾天在測試有關跨域名cookies存儲問題,在某個php測試頁面里的header函數一直遭遇:Warning: Cannot modify header information – headers already sent by錯誤提示。
為了解決該問題,翻山越嶺地用google查詢了相關資料,造成該問題的原因是:函數 header(),setcookie() 和 session 函數需要在輸出流中增加頭信息。但是頭信息只能在其它任何輸出內容之前發(fā)送。在使用這些函數前不能有任何(如 HTML)的輸出。函數 headers_sent() 能夠檢查您的腳本是否已經發(fā)送了頭信息。
來繼續(xù)了解下原理:PHP腳本開始執(zhí)行時,它可以同時發(fā)送header(標題)信息和主體信息。 Header信息(來自 header() 或 SetCookie() 函數)并不會立即發(fā)送,相反,它被保存到一個列表中。 這樣就可以允許你修改標題信息,包括缺省的標題(例如 Content-Type 標題)。但是,一旦腳本發(fā)送了任何非標題的輸出(例如,使用 HTML 或 print() 調用),那么PHP就必須先發(fā)送完所有的Header,然后終止 HTTP header。而后繼續(xù)發(fā)送主體數據。從這時開始,任何添加或修改Header信息的試圖都是不允許的,并會發(fā)送上述的錯誤消息之一。
解決方案如下(須保證出錯函數之前沒有任何輸出):
1、如果說這條僅僅只是錯誤提示,并不影響你程序正常運作,那么只需要“屏蔽”它即可。在頁面頂部的php標簽中加入ob_start();,在返回的信息下面加入ob_end_flush();,這樣就可以屏蔽錯誤信息。
... HTML codes ...//開源軟件:Vevb.com
2、反之要徹底解決,正冰是通過Notepad++先建立一個空白頁面,然后將編碼設置為Encode in UTF-8 without BOM,然后將出問題頁面代碼復制進去保存為一個新頁面即可。
因為所測試的頁面還有一個setcookie函數,這個也會導致這樣的問題出現(xiàn),簡單摘錄如下:cookie本身在使用上有一些限制,例如:
呼叫setcookie的敘述必須放在標簽之前
呼叫setcookie之前,不可使用echo
直到網頁被重新載入后,cookie才會在程式中出現(xiàn)
setcookie函數必須在任何資料輸出至瀏覽器前,就先送出.
解決方法就是在程序開始用ob_start();這個函數.
3、如果問題出現(xiàn)在function文件里面,第一行一般是編碼的問題用2的方法解決,如果是出現(xiàn)在其他行一般是空白行引起的,找到文件所在行刪除即可,還不行的話直接用2的方法.
新聞熱點
疑難解答
圖片精選