這篇文章將為大家詳細講解有關header與緩沖區之間有什么關系,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
測試header之前有輸出
<?php echo 'hello world!'; header('content-type: text/html;charset=utf-8;');
我經過測試時可以成功的,不會出現任何錯誤和警告。不知道你們是怎么樣的?可是我想大多說都是沒有問題,如果出現了Cannot modify header information - headers already sent
這樣的警告,這是是說不能修改頭部信息,頭部信息已經發送。下來就了解一下為什么會出現兩種不同結果?
緩沖區
做個比喻,就好比我們看電影時的緩存一樣。它不會之間立即給我們播放出來,而是先將一部分下載好的電影放到緩存里面,再有緩存播放出來。我們編寫php代碼也是這個道理
php的緩存機制-output_buffering
php中的常用ob
函數
ob_start: 打開輸出緩沖區
ob_clean: 清空緩沖區
ob_get_contents: 返回緩沖區內容
ob_get_clean: 返回緩沖區內容,并清空
<?php ob_start(); echo 'hello world!'; echo ob_get_contents();//輸出hello world!hello world!
在php.ini配置文件中,修改緩沖區大小
一般在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與緩沖區之間的分析
為什么我們之前說header之前不能有輸出
對于header函數,它是像客戶端發送原始的http報頭,是聲明我們所寫網頁到底是什么內容,所以一但這個聲明之前有內容就是錯誤的,是不符合http規則的
下來說說php中的header
在php中header是不經過緩沖區的,它會經過服務器直接輸出到客戶端
解釋之前的警告Cannot modify header information
當我們在header之前寫了一些輸出的話,它會先經過緩沖區。因此即便你寫的了前面,最終的輸出順序還是先header在echo
。
可是一但我們輸出的內容緩存區放不下,即之前的輸出'hello world!'
> 5個字節。就會直接輸出出來,也就是這樣先輸出'hello world'
再header(...),
這樣就違背了真實的header之前不能有輸出
關于header與緩沖區之間有什么關系就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。