2017-09-17 54 views
1

後根據PHP文檔:調用header()函數輸出發送

header()函數發送任何實際輸出之前必須調用,無論是普通的HTML標籤,在一個文件中的空行,或來自PHP。使用include或require函數或其他文件訪問函數讀取代碼,並在調用header()之前輸出空格或空行是非常常見的錯誤。使用單個PHP/HTML文件時存在同樣的問題。

但是當我試圖將文檔報告(一點點的變化)的例子:

<html> 
<?php 
/* This will give an error. Note the output 
* above, which is before the header() call */ 
header('X-Header: http://www.example.com/'); 
exit; 
?> 

所有工作得很好,沒有錯誤POP操作了,我順利地得到了我<html>標籤輸出和我的X-Header在標題中。

我正在使用PHP 7.1.9,所以仍然正確的文件說什麼?

+0

這取決於在'php.ini'配置中設置的一些設置。儘管在輸出之後改變HTTP頭沒什麼意義,所以總是應該在輸出之前調用頭來調用頭。 – Qirel

回答

4

的文檔仍然是正確的。

出於性能考慮,解釋器將輸出放入緩衝區。當第一次填充緩衝區時,它會在發送緩衝區內容之前發送標題。

這可以讓腳本在發送標題之前產生少量的輸出。

閱讀更多關於output buffering的配置設置。

選項output_buffering允許關閉或打開該功能,甚至可以設置緩衝區的大小。

選項implicit_flush告訴解釋器在每個輸出塊後清空緩衝區。這會強制腳本在任何輸出之前正確發送標題。

-1

編輯您的php.inienable Output Buffering ..

+0

它已經打開,它被設置爲4096 – zer0uno

+0

如果他們沒有得到該代碼示例的錯誤,Asker已經啓用了某種形式的輸出緩衝。 – jhilgeman