《PHP編程:header與緩沖區之間的深層次分析》要點:
本文介紹了PHP編程:header與緩沖區之間的深層次分析,希望對您有用。如果有疑問,可以聯系我們。
測試header之前有輸出
PHP教程
<?php echo 'hello world!'; header('content-type: text/html;charset=utf-8;');
我經過測試時可以成功的,不會出現任何錯誤和警告.不知道你們是怎么樣的?可是我想大多說都是沒有問題,如果出現了Cannot modify header information - headers already sent
這樣的警告,這是是說不能修改頭部信息,頭部信息已經發送.下來就了解一下為什么會出現兩種不同結果?PHP教程
緩沖區
PHP教程
做個比喻,就好比我們看電影時的緩存一樣.它不會之間立即給我們播放出來,而是先將一部分下載好的電影放到緩存里面,再有緩存播放出來.我們編寫php代碼也是這個道理
PHP教程
php的緩存機制-output_buffering
PHP教程
php中的常用ob
函數
PHP教程
ob_start: 打開輸出緩沖區
ob_clean:?清空緩沖區
ob_get_contents:?返回緩沖區內容
ob_get_clean:?返回緩沖區內容,并清空
PHP教程
<?php ob_start(); echo 'hello world!'; echo ob_get_contents();//輸出hello world!hello world!
在php.ini配置文件中,修改緩沖區大小PHP教程
一般在233行左右,默認是4096表示4096字節也就是4kB
PHP教程
下來將4096修改為5,重新運行這段代碼PHP教程
<?php echo 'hello world!'; header('content-type: text/html;charset=utf-8;');
對于剛才測試不會出現警告或錯誤的現在卻出現了,錯誤就是:Cannot modify header information - headers already sent
PHP教程
header與緩沖區之間的分析
PHP教程
為什么我們之前說header之前不能有輸出PHP教程
對于header函數,它是像客戶端發送原始的http報頭,是聲明我們所寫網頁到底是什么內容,所以一但這個聲明之前有內容就是錯誤的,是不符合http規則的
PHP教程
下來說說php中的headerPHP教程
在php中header是不經過緩沖區的,它會經過服務器直接輸出到客戶端
PHP教程
解釋之前的警告Cannot modify header informationPHP教程
當我們在header之前寫了一些輸出的話,它會先經過緩沖區.因此即便你寫的了前面,最終的輸出順序還是先header在echo
.PHP教程
可是一但我們輸出的內容緩存區放不下,即之前的輸出'hello world!'
> 5個字節.就會直接輸出出來,也就是這樣先輸出'hello world'
再header(...),
這樣就違背了真實的header之前不能有輸出
PHP教程
總結
PHP教程
在實際當中,我們最好還是把header寫在頁面最前面.因為我們就不確定我們header之前的輸出內容是否緩沖區能放下.希望本文對大家學習php有所幫助.PHP教程
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/5046.html