php output_buffering 緩衝使用

來源:互聯網
上載者:User

buffer是一個記憶體位址空間,linux系統預設大小一般為4096(4kb)。主要用於儲存速度不同步的裝置或優先順序不同的裝置之間傳遞資料的地區。

通過buffer可以使進程之間的相互等待變少。

例如,當你開啟一個文字編輯器,輸入一個字元時,系統並不會立即寫入磁碟。而是儲存在buffer中,當寫滿一個buffer時,才會把buffer的內容寫入磁碟。

當然也可以使用flush強制將buffer的資料寫入磁碟。

在php中,例如 echo,print,輸出並不會立即通過tcp傳遞給瀏覽器輸出。而是將資料寫入php buffer。當一個php buffer寫滿,才會通過tcp傳遞給瀏覽器。

echo /print -> php output_buffer -> tcp buffer -> browser

php output_buffering

預設情況下,php buffer是開啟的,預設值是4096(4kb)。可以在php.ini中找到output_buffering 配置。知道buffer寫滿,才會發送到瀏覽器。

也可以設定ob_start(),這樣即使超過預設值(4kb)也不會立即發送到瀏覽器,只到指令碼運行完成,或者調用了ob_end_flush方法,才會輸出到瀏覽器。

1.output_buffering=4096,輸出較少的資料(少於一個buffer)

<?php  for($i=0; $i<10; $i++){      echo $i.'<br>';      sleep(2);  }  ?>

運行結果:等所有指令碼全部運行完成後,才輸出,因為資料未滿一個buffer的大小。

2.output_buffering=4096,輸出較少的資料(少於一個buffer),關閉output_buffering,修改php.ini的output_buffering=0

<?php  for($i=0; $i<10; $i++){      echo $i.str_repeat("&nbsp;",500).'<br>'; // 當接受到的256(甚至更多)個位元組以後才開始顯示該頁面,所以必鬚髮送一些額外的空格來讓這些瀏覽器顯示頁面內容。      flush();      sleep(1);  }  ?>

運行結果:因為禁用了php buffering,不需要等到指令碼運行完畢就可以輸出,資料沒有在php buffer停留,可以看到斷斷續續間歇性輸出。echo -> tcp buffer ->browser

3.當output_buffering=4096,輸出較大資料(大於一個buffer),不使用ob_start()

<?php  for($i=0; $i<10; $i++){      echo file_get_contents('f.txt').$i.'<br>';      sleep(1);  }  ?>

運行結果:f.txt為一個大於4kb的檔案,因為大於buffer預設值,buffer空間不夠用,每當滿一個buffer就會輸出,所以可以看到間歇性輸出。

4.當output_buffering=4096,輸出較大資料(大於一個buffer),使用ob_start()

<?php  ob_start();  for($i=0; $i<10; $i++){      echo file_get_contents('f.txt').$i.'<br>';      sleep(1);  }  ?>

運行結果:因為使用了ob_start(),會為buffer設定足夠大的空間,因此會儲存到指令碼執行完畢後才會輸出。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.