2015-02-11 54 views
2

對於我所知道的是它不能發送HTTP標頭後,你的輸出已發送,只要解決的辦法是使用輸出緩衝頭被髮送,雖然產量已發送

但我的PHP腳本能夠甚至在發送輸出之後發送頭文件。 這裏是我的代碼

Text output already sent 
<?php 
header('Location: test2.php'); 
die(); 
?> 

爲什麼這個代碼不給錯誤「HTTP標頭已經發送」 有另一種方式把輸出緩衝嗎?

編輯:

我使用WAMP

沒有文件運行它在我的本地包括在上面的代碼

我只注意到outbut_buffering中的phpinfo)指令(被設置爲1 但是,當我檢查它在php.ini文件它被設置爲關

+2

您是否啓用了輸出錯誤?是否執行了重定向? (我懷疑它) – 2015-02-11 08:32:21

+1

錯誤未被顯示的事實並不意味着沒有任何錯誤;) – 2015-02-11 08:33:26

+0

是display_errors設置爲On並且正在執行重定向 – 2015-02-11 09:30:35

回答

2

你是對的,這不應該工作。

首先,你確定頭文件是否寫入,或者你是否想知道爲什麼沒有顯示錯誤信息?也許錯誤報告被關閉了?在這種情況下,儘量加大錯誤報告級別:

error_reporting(E_ALL); 
ini_set("display_errors", 1); 

從您的代碼,當你完成調試刪除此。應該將錯誤記錄到日誌文件中,永遠不會顯示在生產環境中!

此外,檢查頭是否真的發送。你可以做到這一點與wget例如:

wget -S http://example.com/ 

curl

curl -v http://example.com/ 

您可以也看到在鉻合金開發者控制檯的HTTP標頭。在其他瀏覽器中可能也是如此。

如果標題確實發送了,那麼可能有一些關於輸出緩衝的魔法。你是在本地運行還是在遠程主機上運行?如果這不是你的主機,它可能是提供商已經設置好了。 PHP具有自動添加和附加自定義代碼的功能。檢查php.ini設置auto_prepend_fileauto_append_file。可能有一些ob_start()等隱藏。您可以撥打phpinfo()ini_get()查看所有PHP設置。

+0

auto_prepend_file和auto_append_file在phpinfo中都沒有設置值...請檢查問題的編輯 – 2015-02-11 09:27:55

1

您看不到錯誤,因爲啓用了輸出緩衝。試試這個代碼:

<?php 
ob_end_clean(); 
?> 
Text output already sent 
<?php 
header('Location: test2.php'); 
die(); 
?> 

它返回錯誤:

Text output already sent Warning: Cannot modify header information - headers already sent by

+0

不起作用...標題仍然發送。 – 2015-02-11 09:28:33

+0

@AbhishekAgarwal嘗試添加'error_reporting(E_ALL); ini_set(「display_errors」,1);'此文件的開頭 – stepozer 2015-02-11 09:31:44

+0

已按照Daniel Schroeder的建議完成 – 2015-02-11 09:35:31

1

您可以檢查和其中頭已與headers_sent發送功能:

if (!headers_sent($filename, $linenum)) { 
    header('Location: test2.php'); 
    exit; 
} else { 
    echo 'Headers sent from '. $filename; 
} 

然後檢查$filename

相關問題