2012-09-14 47 views
1

我習慣在輸出啓動後無法發送標題。實際上,我依靠它。PHP 5.4:防止在輸出後設置標題

在我正在處理的應用程序中,在每次成功更新或插入查詢後,該頁面將重新加載一個header('Location: ...')調用。這是因爲我不希望帶POST數據的頁面可以刷新。

但是在開發過程中,其中一個查詢可能只是有一個錯誤 - 然後我打印出一些調試信息(使用echo)。這會阻止頁面重新加載 - 但是自從我升級到php 5.4以後,它只是重新加載。如果在打印調試信息(我不太喜歡這些信息)後輸入exit;,則只能讀取調試信息,因爲稍後會在腳本中顯示更多調試信息。

如果我在其中一個回顯調用中檢查headers_sent(),它說頭還沒有發送。所以看起來它沒有我(明知)已經被緩衝了。

這當然可能是一個php.ini設置,而不是現在我正在使用版本5.4,但我找不到它。

有人有想法嗎?

+2

我們可以看到一些示例代碼嗎? –

+0

你嘗試過'error_reporting(E_ALL)'嗎? – ComFreek

+1

你的'php.ini'文件中'output_buffering'的值是什麼? – jeroen

回答

1

jeroen在php.ini的指定位置output_buffering設置回答了我的問題(在我的原始問題的評論中)。謝謝!

1

使用輸出緩衝來解決這個問題。基本上所有你需要做的就是儘快致電ob_start();。然後,PHP不會立即發送內容,而會緩衝輸出。所以,它首先,身體或頭部設置並不重要。它們將被設置在緩衝區中,所以除非發送緩衝區,否則操作不成問題。如果你沒有明確地清空緩衝區,它將在腳本結束時由PHP發送。參見PHP手冊中的Output Buffering Control章節。

+0

我明白你的建議,但我不認爲這就是我想要的:我不想緩衝,但我似乎無論如何得到它。我確實希望'header()'調用由於輸出已經啓動而失敗,這樣我就可以看到調試信息。 – Sygmoral

+0

雖然這確實是一個輸出緩衝問題 - 感謝jeroen對我原來的問題的評論,我能夠發現php是由於在php.ini中設置了output_buffering而自動緩衝輸出。 – Sygmoral