php headers sent 是指當php腳本開始輸出內(nèi)容時,服務端會自動發(fā)送一個HTTP頭信息。如果發(fā)送HTTP頭信息之前存在php輸出,則會導致headers already sent 錯誤。
?比如下面的例子:
上面的代碼會報出類似于“Warning: Cannot modify header information - headers already sent by (output started at /path/to/file.php:10)”的錯誤。這是因為php輸出內(nèi)容(即echo語句)會自動發(fā)送HTTP頭信息,而header函數(shù)在輸出之后調(diào)用,導致錯誤。
?如何解決這個問題呢?
首先,我們可以使用輸出緩沖區(qū)來解決。輸出緩沖區(qū)可以將所有輸出數(shù)據(jù)保存到緩沖區(qū)中,在所有php代碼執(zhí)行完畢之后再一次性輸出所有內(nèi)容和頭信息。
其次,我們也可以避免使用echo等函數(shù)來輸出內(nèi)容,而是使用變量來保存輸出內(nèi)容,直到需要輸出時才一次性輸出。這樣就可以避免在輸出內(nèi)容之前發(fā)送頭信息。
最后,還有一些常見的問題需要注意一下:
- 不要在文件開頭處使用BOM(Byte Order Mark)。BOM是一種特殊字符,用于指定文本文件的編碼方式。如果在php文件開頭處使用BOM,則會導致headers already sent錯誤。
- 確保在php文件中不包含額外的空格或換行符。如果一個php文件在結束標簽之后有空格或換行符,則會導致headers already sent錯誤。
- 確保所有php代碼都在<?php 和 ?>標簽之間。如果php代碼之外存在其他字符,則會導致headers already sent錯誤。
- 如果使用include或require函數(shù)包含其他文件,則需要確保被包含的文件中沒有輸出任何內(nèi)容。否則會導致headers already sent錯誤。
總結一下,php headers sent 錯誤是由php輸出內(nèi)容導致的。解決這個問題可以使用輸出緩沖區(qū)或避免在輸出之前發(fā)送頭信息。此外,還需注意一些常見的問題,如BOM、額外的空格或換行符、非法php代碼等。