2014-02-10 29 views
2

最近我遇到很多5.4+的問題,其中一個是重定向不起作用,錯誤例如「頭文件已經發送」。發送郵件頭輸出太早PHP 5.4發生問題

我注意到的是,如果我將文件另存爲「沒有BOM的UTF-8」問題就消失了(我想有些字符我沒有真正看到)。

我該如何解決這個問題,所以我不必將每個文件轉換爲「沒有BOM的UTF-8」?

謝謝!

回答

1

BOM(字節順序標記)由3個字節(0xEF 0xBB 0xBF)組成,它表示生成它的系統的字節序列(即,在Intel/x86兼容處理器上的小端,非常大端的還要別的嗎)。 UTF-8並不需要它,是的,你不應該在你的文件中。

問題是,由於物料清單是在字符串的開頭(因此也是文件的開始),因此它會在您打開<?php之前插入,因此會被髮送到瀏覽器。

我不知道爲什麼PHP 5.4不會忽略它,以前的版本應該如此,但是如果它是UTF-8,你應該在文件中沒有它。

+0

我真的很困惑爲什麼從PHP 5.3.x升級到5.4.x後突然出現這個問題。 – ProDraz

+0

我從未見過早期版本的PHP忽略BOM(即,您總是收到「頭文件已發送」)。無論如何,治療是配置你的編輯器永遠不會使用BOM保存。附: BOM是3個字節,並且如果您將編輯器(或瀏覽器)置於單字節模式(如Latin-1),則會看到它顯示。 –

+1

也許'output_buffering'在之前是有效的,但是當你升級到5.4時被禁用了...... – CBroe

-1

「頭部已經發送」通常,當你嘗試做一個頭重定向

header("Location: some URL"); 

你已經輸出一些HTML後出現。

爲了解決這個問題,做你的PHP檢查和報頭的調用get_header()(WordPress的),或者包括header.php文件(CMS)

+0

http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error -in-php –

+0

是的,但是我發現頭文件已經發出,因爲文件中有空白。我在記事本或其他編輯器中看不到它。 – ProDraz

0

https://bugs.php.net/bug.php?id=42312&edit=1可以給你一些信息和交叉引用(見之前重定向評論),但它看起來好像你只是需要解決它(雖然其中一個評論者建議編譯選項,可能會使生活更容易)。