溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

header與緩沖區之間有什么關系

發布時間:2020-12-10 14:57:19 來源:億速云 閱讀:173 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關header與緩沖區之間有什么關系,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

測試header之前有輸出

<&#63;php
echo 'hello world!';
header('content-type: text/html;charset=utf-8;');

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

緩沖區

做個比喻,就好比我們看電影時的緩存一樣。它不會之間立即給我們播放出來,而是先將一部分下載好的電影放到緩存里面,再有緩存播放出來。我們編寫php代碼也是這個道理

php的緩存機制-output_buffering

php中的常用ob函數

ob_start: 打開輸出緩沖區
ob_clean: 清空緩沖區
ob_get_contents: 返回緩沖區內容
ob_get_clean: 返回緩沖區內容,并清空

<&#63;php
ob_start();
echo 'hello world!';
echo ob_get_contents();//輸出hello world!hello world!

php.ini配置文件中,修改緩沖區大小

一般在233行左右,默認是4096表示4096字節也就是4kB

下來將4096修改為5,重新運行這段代碼

<&#63;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與緩沖區之間有什么關系就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女