我們在實際的開發中,是否聽說過在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就會將要輸出的資料放...