2013-05-31 23 views
0

我在所有頁面上都寫了<?php session_start(); ?>某些頁面渲染正常,但在其他頁面中出現此錯誤。我檢查和匹配每個頁面的代碼和代碼是好的。如果我刪除<?php session_start(); ?>然後頁面渲染正常,但我需要使用會話。部分頁面出現PHP會話錯誤

Cannot send session cache limiter - headers already sent (output started at /home/) in ... 

有一點要注意的是:它在我的本地服務器上運行良好。

+0

你是否包含'session_start()'之前的任何文件? – Sablefoste

+0

是不是....頭文件已發送? – steven

+0

我包含文件,但在此session_start()之後。是它的頭文件已經發送 –

回答

0

我敢打賭這是兩件事情之一:

  • 確保沒有輸出,包括換行,在你的文件,你打電話之前session_start。 PHP必須首先發送HTTP標頭(在郵件正文之前,即頁面內容),所以在你發送頁面內容之後試圖發送一個標題會給你一個錯誤。

  • 您只能每頁打電話session_start一次。如果您在撥打session_start後在文件中使用include,請確保您未在​​包含的文件中再次撥打session_start。這會導致「標題已發送」錯誤。

+0

沒有輸出,它被稱爲一次 –

0

你有一些輸出(也許是一個空白)在你的一個包括的文件。可能你的<?php不是你文件的第一個地方。

0

你也可以嘗試使用輸出緩衝(http://php.net/manual/es/function.ob-start.php)。我首先要檢查你是否錯誤地發送了任何輸出(就像@steven所建議的那樣),但是,對你來說緩衝輸出可能是一個好主意。

0

由於您包含多個文件,並且您似乎在多個文件中有一個session_start(),所以我打賭在第二個文件中拋出錯誤。

檢查所有文件的session_start(),以及其中任何這些被調用之前的空白。

0

這是一個非常典型的BOM表頭問題。我懷疑你的編輯器在文件的開頭存儲了一個3字節的UTF-8 BOM標頭。編輯器會隱藏它們,所以如果你不確定你的文件是否包含這些字符,你可以使用非解釋編輯器(十六進制編輯器)或這個美妙的在線W3C checker

+0

好的文本編輯器會讓你保存一個沒有bom的文件 – sgroves

+0

@sgroves - 當然,如果確實是這個問題,下一步就是尋找合適的編輯器選項中的設置。 – martinstoeckli