日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP buffer的机制

發布時間:2023/12/18 php 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP buffer的机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PHP的buffer是這樣的:

輸出的字符串 => PHP buffer => 等待輸出 => web 服務器的緩沖區 => tcp 緩沖區 => 客戶端。過程其實相當的復雜。

大概的工作機制:

bool?ob_start??? ([?callback?$output_callback?? [,?int?$chunk_size?? [,?bool?$erase? ]]] ) 這個函數我關鍵要強調一下第二個參數:

如果可選參數?chunk_size?被賦值了,在任何一個能引起緩沖區的長度等于或超過?chunk_size?的輸出操作后,緩沖區都會被刷送。 ?默認值 0 意味著腳本結束之后,緩沖區會被刷送,其余的特殊值可以將?chunk_size從 1 設定到 4096。??

這個參數默認是0.

還有一點,緩沖區是可以嵌套的。這點非常關鍵。比如你調用了兩次ob_start ,就會創建用兩個緩沖區。第二次創建的緩沖區,會寫入第一次創建的緩沖區,而ob_start 創建的緩沖區,總是會寫入output_buffering =ON 時候系統自動創建的緩沖區。

我們再來看一下:ob_end_flush ,這個函數的作用是把最后一次打開的緩沖區關閉掉,并把內容送入下一個緩沖區。如果下一個緩沖區沒有,就進入等待輸出的狀態了。

flush是刷新等待輸出的內容去瀏覽器。前提是內容是等待輸出的狀態了,而不是在緩沖區中,它不會影響緩沖區的內容。

再來看你的代碼:

如果output_buffering = On ,那么系統會默認創建一個緩沖區,這個大小一般是2K.?ob_end_flush的內容會進入這個緩沖區,而不會進入輸出等待。所以調用flush一點效果都沒有。直到腳本結束,PHP送出所有的內容。

如果output_buffering = Off?ob_end_flush的內容會進入輸出等待狀態,這個時候flush一下,內容就能輸出了。

當然,這個只是PHP這一端的情況分析。

還會有其他的因數影響最終的輸出:

?個別web服務器程序,特別是Win32下的web服務器程序,在發送結果到瀏覽器之前,仍然會緩存腳本的輸出,直到程序結束為止。???

?有些Apache的模塊,比如mod_gzip,可能自己進行輸出緩存,這將導致flush()函數產生的結果不會立即被發送到客戶端瀏覽器。???

?甚至瀏覽器也會在顯示之前,緩存接收到的內容。例如 Netscape 瀏覽器會在接受到換行或 html 標記的開頭之前緩存內容,并且在接受到 </table> 標記之前,不會顯示出整個表格。???

???? 一些版本的 Microsoft Internet Explorer 只有當接受到的256個字節以后才開始顯示該頁面,所以必須發送一些額外的空格來讓這些瀏覽器顯示頁面內容。

轉載于:https://www.cnblogs.com/yulei126/p/6786073.html

總結

以上是生活随笔為你收集整理的PHP buffer的机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。