php緩衝區與header函式之間的秘密

2021-09-20 02:06:40 字數 1572 閱讀 5909

我們在實際的開發中,是否聽說過在header之前不能有任何的實際輸出。甚至有的認為header函式必須寫在**的最前面。可是你是否試驗過header函式之前輸出東西?下來讓我們更深層次的了解一下

<?php 

echo 'hello world!';

header('content-type: text/html;charset=utf-8;');

我經過測試時可以成功的,不會出現任何錯誤和警告。不知道你們是怎麼樣的?可是我想大多說都是沒有問題,如果出現了cannot modify header information - headers already sent這樣的警告,這是是說不能修改頭部資訊,頭部資訊已經傳送。下來就了解一下為什麼會出現兩種不同結果?

函式解釋

ob_start

開啟輸出緩衝區

ob_clean

清空緩衝區

ob_get_contents

返回緩衝區內容

ob_get_clean

返回緩衝區內容,並清空

<?php 

ob_start();

echo 'hello world!';

echo ob_get_contents();//輸出hello world!hello world!

一般在233行左右,預設是4096表示4096位元組也就是4kb

下來將4096修改為5,重新執行這段**

<?php 

echo 'hello world!';

header('content-type: text/html;charset=utf-8;');

對於剛才測試不會出現警告或錯誤的現在卻出現了,錯誤就是:cannot modify header information - headers already sent

對於header函式,它是像客戶端傳送原始的http報頭,是宣告我們所寫網頁到底是什麼內容,所以一但這個宣告之前有內容就是錯誤的,是不符合http規則的

在php中header是不經過緩衝區的,它會經過伺服器直接輸出到客戶端

當我們在header之前寫了一些輸出的話,它會先經過緩衝區。因此即便你寫的了前面,最終的輸出順序還是先header在echo。

可是一但我們輸出的內容快取區放不下,即之前的輸出'hello world!' > 5個位元組。就會直接輸出出來,也就是這樣先輸出'hello world'再header(...),這樣就違背了真實的header之前不能有輸出

在實際當中,我們最好還是把header寫在頁面最前面。因為我們就不確定我們header之前的輸出內容是否緩衝區能放下。

php緩衝區與header函式之間的秘密

我們在實際的開發中,是否聽說過在header之前不能有任何的實際輸出。甚至有的認為header函式必須寫在 的最前面。可是你是否試驗過header函式之前輸出東西?下來讓我們更深層次的了解一下 echo hello world header content type text html charse...

php緩衝區與header函式之間的秘密

我們在實際的開發中,是否聽說過在header之前不能有任何的實際輸出。甚至有的認為header函式必須寫在 的最前面。可是你是否試驗過header函式之前輸出東西?下來讓我們更深層次的了解一下 測試header之前有輸出 ob start echo hello world echo ob get c...

php 緩衝區,PHP的輸出緩衝區

1 什麼是緩衝區?緩衝區的作用是把輸入或者輸出的內容先放進記憶體,而不顯示或者讀取,最本質的作用就是協調高速cpu和相對緩慢的io裝置 磁碟等 的運作。2 php在執行的時候,在什麼地方有用到緩衝區?當執行php的時候,如果碰到了echo print r之類的會輸出資料的 php就會將要輸出的資料放...