国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > PHP > 正文

PHP flush()與ob_flush()的區別詳解

2020-03-22 20:15:21
字體:
來源:轉載
供稿:網友
buffer ---- flush()

buffer是一個內存地址空間,html' target='_blank'>Linux系統默認大小一般為4096(1kb),即一個內存頁。主要用于存儲速度不同步的設備或者優先級不同的 設備之間傳辦理數據的區域。通過buffer,可以使進程這間的相互等待變少。這里說一個通俗一點的例子,你打開文本編輯器編輯一個文件的時候,你每輸入 一個字符,操作系統并不會立即把這個字符直接寫入到磁盤,而是先寫入到buffer,當寫滿了一個buffer的時候,才會把buffer中的數據寫入磁 盤,當然當調用內核函數flush()的時候,強制要求把buffer中的臟數據寫回磁盤。
同樣的道理,當執行echo,print的時候,輸出并沒有立即通過tcp傳給客戶端瀏覽器顯示, 而是將數據寫入php buffer。php output_buffering機制,意味在tcp buffer之前,建立了一新的隊列,數據必須經過該隊列。當一個php buffer寫滿的時候,腳本進程會將php buffer中的輸出數據交給系統內核交由tcp傳給瀏覽器顯示。所以,數據會依次寫到這幾個地方echo/pring - php buffer - tcp buffer - browser

php output_buffering --- ob_flush()

默認情況下,php buffer是開啟的,而且該buffer默認值是4096,即1kb。你可以通過在php.ini配置文件中找到output_buffering配置.當echo,print等輸出用戶數據的時候,輸出數據都會寫入到php output_buffering中,直到output_buffering寫滿,會將這些數據通過tcp傳送給瀏覽器顯示。你也可以通過 ob_start()手動激活php output_buffering機制,使得即便輸出超過了1kb數據,也不真的把數據交給tcp傳給瀏覽器,因為ob_start()將php buffer空間設置到了足夠大 。只有直到腳本結束,或者調用ob_end_flush函數,才會把數據發送給客戶端瀏覽器。

這兩個函數的使用怕是很多人最迷惑的一個問題,手冊上對兩個函數的解釋也語焉不詳,沒有明確的指出它們的區別,似乎二者的功能都是刷新輸出緩存。但在我們文章一開始的代碼中如果講fush()替換成ob_flush(),程序就再不能正確執行了。顯然,它們是有區別的,否則也手冊中直接說明其中一個是另外一個函數的別名即可了,沒必要分別說明。那么它們的區別到底是什么呢?

在沒有開啟緩存時,腳本輸出的內容都在服務器端處于等待輸出的狀態 ,flush()可以將等待輸出的內容立即發送到客戶端。開啟緩存后,腳本輸出的內容存入了輸出緩存中 ,這時沒有處于等待輸出狀態的內容,你直接使用flush()不會向客戶端發出任何內容。而 ob_flush()的作用就是將本來存在輸出緩存中的內容取出來,設置為等待輸出狀態,但不會直接發送到客戶端 ,這時你就需要先使用 ob_flush()再使用flush(),客戶端才能立即獲得腳本的輸出。一.flush和ob_flush的正確順序,正確應是,先ob_flush再flush,如下:
ob_flush();
flush();
如果Web服務器的操作系統是windows系統,那順序顛倒或者不使用ob_flush()也不會出現問題。[有待求證 ] 但是在Linux系統上就無法刷新輸出緩沖。

output buffering函數
1.bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
激活output_buffering機制。一旦激活,腳本輸出不再直接出給瀏覽器,而是先暫時寫入php buffer內存區域。
php默認開啟output_buffering機制,只不過,通過調用ob_start()函數據output_buffering值擴展到足夠 大 。也可以指定$chunk_size來指定output_buffering的值。$chunk_size默認值是0,表示直到腳本運行結束,php buffer中的數據才會發送到瀏覽器。如果你設置了$chunk_size的大小 ,則表示只要buffer中數據長度達到了該值,就會將buffer中 的數據發送給瀏覽器。
當然,你可以通過指定$ouput_callback,來處理buffer中的數據。比如函數ob_gzhandler,將buffer中的數據壓縮后再傳送給瀏覽器。
第三個參數:是否擦除緩存,可選,默認是true,如果設置為false,則在腳本執行結束前,緩存都不會被清除。
2.ob_get_contents
獲取一份php buffer中的數據拷貝。值得注意的是,你應該在ob_end_clean()函數調用前調用該函數,否則ob_get_contents()返回一個空字符中。

可以使用ob_get_contents()以字符串形式獲取服務端緩存的數據,
使用ob_end_flush()則會輸出被緩存起來的數據,并關閉緩存。
而使用ob_end_clean()則會靜默的清除服務端緩存的數據,而不會有任何數據或其他行為。
服務端的緩存是堆疊起來的,也就是說你在開啟了ob_start()后,關閉之前,在其內部還 可以開啟另外一個緩存ob_start()。

不過你也要務必保證關閉緩存的操作和開啟緩存的操作數量一樣多。
ob_start() 可以指定一個回調函數來處理緩存數據,如果一個ob_start()內部嵌套了另一個ob_start(),我們假定,外層的ob_start(),編號是A,內層的ob_start()編號是B,它們各自制定了一個回調函數分別是functionA和functionB,那么在緩存B中的數據輸出時,它會先輩funcitonB回調函數處理,再交給外層的functionA回調函數處理,之后才能輸出到客戶端。

另外,手冊說,對于某些web服務器,比如apache,在使用回調函數有可能會改變程序當前的工作目錄,解決方法是在回調函數中自行手動把工作目錄修改回來,用chdir函數,這點似乎不常遇到,遇到的時候記得去查手冊吧。

3.ob_end_flush與ob_end_clean
這二個函數有點相似,都會關閉ouptu_buffering機制。但不同的是,ob_end_flush只是把php buffer中的數據沖(flush/send)到客戶端瀏覽器,而ob_clean_clean將php bufeer中的數據清空(erase),但不發送給客戶端瀏覽器。

ob_end_flush調用之前 ,php buffer中的數據依然存在,ob_get_contents()依然可以獲取php buffer中的數據拷貝。而ob_end_flush()調用之后 ob_get_contents()取到的是空字符串,同時瀏覽器也接收不到輸出,即沒有任何輸出。可以使用ob_get_contents()以字符串形式獲取服務端緩存的數據,使用ob_end_flush()則會輸出被緩存起來的數據,并關閉緩存。
而使用ob_end_clean()則會靜默的清除服務端緩存的數據,而不會有任何數據或其他行為。
服務端的緩存是堆疊起來的,也就是說你在開啟了ob_start()后,關閉之前,在其內部還可以開啟另外一個緩存ob_start()。不過你也要務必保證關閉緩存的操作和開啟緩存的操作數量一樣多。
ob_start() 可以指定一個回調函數來處理緩存數據,如果一個ob_start()內部嵌套了另一個ob_start(),我們假定,外層的ob_start(),編號是A,內層的ob_start()編號是B,它們各自制定了一個回調函數分別是functionA和functionB,那么在緩存B中的數據輸出時,它會先輩funcitonB回調函數處理,再交給外層的functionA回調函數處理,之后才能輸出到客戶端。

另外,手冊說,對于某些web服務器,比如apache,在使用回調函數有可能會改變程序當前的工作目錄,解決方法是在回調函數中自行手動把工作目錄修改回來,用chdir函數,這點似乎不常遇到,遇到的時候記得去查手冊吧。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产一卡2卡3卡4卡网站免费| 五月婷婷丁香激情| 国产一区二区三区美女秒播| 激情丁香在线| 国产一级二级在线| 国产欧美久久久久久久久 | 懂色av中文在线| 国产亚洲精品午夜高清影院| 国产黄色免费网站| 九九热视频在线观看| www.91在线播放| 国产福利三区| 丁香视频五月| 在线三级中文| 国产黄色片中文字幕| 青青在线视频| 国产超碰在线观看| 99热最新网址| av在线免费播放| 国产精品jvid在线观看| 天堂在线国产| 一二三四区在线观看| 中文字幕国产欧美| 福利视频网站导航| 日本高清中文字幕在线| 国产一二三区在线| 国产在线观看91| 亚洲网站一区| 精品极品三级久久久久| 国产精品美女视频免费观看软件| 开心快乐六月丁香婷婷| 亚洲精品少妇久久久久久| 国产馆av播放| 国产色婷婷在线| 国产午夜在线| 国产精品麻豆一区二区三区| 午夜伦全在线观看| 五月天婷婷基地| 国产午夜电影| 国产精品入口麻豆免费看| 免费三级毛片| 国产精品一区牛牛影视| 国产美女福利在线| 国产一级黄色片免费| 国产欧美久久久久久久久| 国产素人视频在线观看| 中文字幕毛片| 国产精品9区| 在线免费看黄av| 人人干人人插| 丁香在线视频| 91国内精品久久久久| 91xx在线观看| 亚洲精品一线| 久草在线视频网| 国产69精品久久app免费版| 国产麻豆视频| 精品极品三级久久久久| www狠狠操| 国产一级粉嫩xxxx| 在线视频观看国产| 成年人在线观看| 精品极品三级久久久久| 欧美性xxxx交| 国产激情二区| 国产69精品久久久久孕妇国产69久久| 国产视频三区| av中文字幕在线看| 最近高清中文在线字幕在线观看| 99久热re在线精彩视频| 欧美日韩综合高清一区二区| 午夜视频在线| 欧美日韩视频精品二区| 国产视频资源| 国产美女av在线| jlzzjlzz欧美大全| 91高清国产| 国产婷婷视频在线| 免费高清视频日韩| 99在线欧洲视频| 国产精品美女一区二区视频| 任你操在线观看| 樱花草在线观看www| 国产三区视频在线观看| 国产农村av| 日本黄在线观看| 永久免费在线观看| 97国产视频| 国产三级av在线| 中文字幕不卡免费视频| 国产美女福利在线观看| 免费国产阿v视频在线观看| 精品麻豆国产| 99免费视频| 影音先锋在线中文字幕| 国产激情在线视频| 国产第一页在线| 国产成人亚洲综合小说区| 国产污污在线观看| 国产人成在线观看| 中文字幕视频在线| 国产午夜精品一区理论片| 国产一区电影| 69久久精品| 亚洲免费国产| 麻豆av电影在线观看| 老司机在线视频二区| 成年人在线观看| 天堂在线亚洲| 国产黄a三级三级三级av在线看| 国产二区视频在线观看| av网站在线播放| 久草网在线视频| 国产视频二区在线观看| 国产福利三区| 精品街拍一区二区| 日本一卡二卡四卡精品| 国产主播福利在线| 国产xxx在线| gogogogo高清视频在线| 国产精选在线观看| 精品一区二区三区在线成人 | 亚洲日本伊人| 国内自拍视频在线看免费观看| 黄色毛片在线观看| 国产黄a三级三级三级av在线看 | 91www在线观看| www.亚洲视频| 国产极品嫩模在线视频一区| 伊人春色在线| 国产真实伦在线观看| 国产黄大片在线观看画质优化| gogogogo高清视频在线| 2018av男人天堂| 日本国产在线| 中文资源在线网| 中文字幕人成高视频| 亚洲第一区视频| 国产91在线视频蝌蚪| 快射av在线播放一区| 99热免费在线| 国产一二三视频| 麻豆av在线| 亚洲人成电影| 精品国语对白精品自拍视| 国产免费永久在线观看| wwwww亚洲| 四虎国产精品永久| 9999在线视频| 国产极品美女到高潮| 五月婷婷在线视频| 成年网在线观看免费观看网址| 天天插天天狠天天透| 精精国产xxxx视频在线中文版 | 国产毛片毛片| 免费午夜一级| 人人干在线视频| 天天插天天干| www在线视频| 美女免费视频黄| 免费一区二区在线观看| eeuss影影院www在线播放| 伊人福利在线| 香蕉视频在线观看www| av在线官网| 国产在线观看av| 国产网站麻豆精品视频| 国产视频三区| 精品美女视频在线观看免费软件| 国产福利三区| av小说在线| 国产美女视频一区二区二三区| 最近中文字幕mv2018在线高清| 国产一卡2卡3卡四卡网站| 国产一区二区在线|播放| 国产桃色电影在线播放| 18av在线视频| www在线免费观看视频| 久久精品视频免费看| 中文字幕在线永久在线视频| 国产高清一级片| 亚洲成人在线播放| 丁香综合五月| 永久免费av网站| 超碰在线网址| 国产精品99999| 老鸭窝av在线| 精品美女视频在线观看免费软件| 亚洲免费国产| 国产小视频在线播放| 四虎精品视频| 国产精品久久在线| 免费一区二区在线观看| 国产9色视频| 成人免费一区二区三区牛牛| 精品999视频| 国产精品久久久久久久牛牛| www.操操| 亚洲激情丁香| 国产激情在线视频|