亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

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

2020-03-22 20:09:35
字體:
來源:轉載
供稿:網友
  • 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/print -> 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編程

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

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    欧美美女15p| 日韩精品中文字幕在线观看| 91精品国产电影| 精品久久久av| 日韩电视剧免费观看网站| 精品无人区乱码1区2区3区在线| 亚洲男人的天堂在线| 精品视频中文字幕| 亚洲欧洲一区二区三区久久| 91久久在线播放| 国产日韩欧美影视| 久久久成人精品| 欧美成人精品三级在线观看| 国产美女久久精品香蕉69| 国产日韩专区在线| 亚洲欧美日韩国产精品| 国产精品午夜一区二区欲梦| 亚洲国产小视频| 精品成人在线视频| 久久国产加勒比精品无码| 91精品啪aⅴ在线观看国产| 亚洲人成77777在线观看网| 欧美性猛交xxxx乱大交蜜桃| 国产精品午夜视频| 国产精品海角社区在线观看| 国产成人拍精品视频午夜网站| 日韩精品在线免费观看| 亚洲久久久久久久久久久| 狠狠爱在线视频一区| 国产成人激情小视频| 欧美国产日韩一区二区三区| 2019中文字幕在线观看| 欧美老女人性视频| 国产91色在线播放| 韩国国内大量揄拍精品视频| www国产亚洲精品久久网站| 日韩av最新在线观看| 日韩在线观看视频免费| 91福利视频网| 亚洲色图第一页| 欧亚精品在线观看| 精品国产一区二区三区久久狼黑人| 日本精品久久久久久久| 日本欧美精品在线| 亚洲毛片一区二区| 欧美日韩国产第一页| 欧美日韩aaaa| 欧美精品激情在线| 亚洲男人天堂2023| 欧美另类极品videosbest最新版本| 亚洲欧洲一区二区三区在线观看| 国产成人精品综合久久久| 国产欧美精品一区二区三区介绍| 亚洲国产成人精品久久久国产成人一区| 国产91在线高潮白浆在线观看| 91极品女神在线| 国产亚洲精品久久久久久777| 久久精品国产电影| 色偷偷亚洲男人天堂| 国产精品电影在线观看| 欧美大片在线看免费观看| 在线播放国产一区中文字幕剧情欧美| 成人国产亚洲精品a区天堂华泰| 欧美成人精品xxx| 18一19gay欧美视频网站| 亚洲激情国产精品| 欧美日韩国产一区二区三区| 国产日韩精品视频| 久久免费观看视频| 国产亚洲精品一区二区| 日韩激情第一页| 91精品国产91久久久久久不卡| 在线观看国产成人av片| 黑人巨大精品欧美一区免费视频| 欧美性videos高清精品| 麻豆国产va免费精品高清在线| 欧美日韩国产在线| 日韩美女写真福利在线观看| 亚洲免费视频一区二区| 国产香蕉精品视频一区二区三区| 欧美午夜视频一区二区| 亚洲黄色成人网| 中文国产成人精品久久一| 国产拍精品一二三| 亚洲国产精品福利| 奇米一区二区三区四区久久| 国内精品中文字幕| 国产精品福利小视频| 日韩中文字幕国产| 欧美日韩成人黄色| 精品色蜜蜜精品视频在线观看| 国产亚洲欧美视频| 色琪琪综合男人的天堂aⅴ视频| 成人激情在线播放| 欧美小视频在线| 国产日韩在线观看av| 国产z一区二区三区| 亚洲伊人久久综合| 亚洲无av在线中文字幕| 色噜噜狠狠狠综合曰曰曰88av| 亚洲欧美日韩一区二区在线| 免费97视频在线精品国自产拍| 国产91|九色| 九九热r在线视频精品| 国产精品劲爆视频| 国产精品a久久久久久| 日韩最新中文字幕电影免费看| 欧美黑人巨大xxx极品| 日韩电影免费观看中文字幕| 欧美激情在线狂野欧美精品| 欧美性猛交xxxx富婆| 日韩在线小视频| 亚洲欧美中文字幕| 欧美性猛交xxxx免费看| 久久久久久这里只有精品| 中文字幕亚洲字幕| 国产精品久久久久久久电影| 国产美女主播一区| 欧美成人剧情片在线观看| 亚洲国产成人久久综合一区| 91久久精品久久国产性色也91| 国产日韩欧美影视| 欧美日韩亚洲国产一区| 亚洲一区二区久久久| 久久国产精品久久久久久久久久| 亚洲人成毛片在线播放| 在线视频欧美日韩精品| 久久视频国产精品免费视频在线| 成人久久久久久久| 555www成人网| 日韩av免费看| 国产亚洲视频在线| 亚洲精品女av网站| 久久久最新网址| 日韩成人中文字幕| 中国人与牲禽动交精品| 欧美性猛交xxxx富婆弯腰| 午夜精品三级视频福利| 国产亚洲精品久久久久久| 久久久久久久久久久国产| 久久精品亚洲国产| 欧美视频中文在线看| 91精品视频大全| 日韩中文字幕国产精品| 日本精品久久中文字幕佐佐木| 亚洲精品自产拍| 亚洲在线观看视频| 国产成人一区二区| 91精品啪aⅴ在线观看国产| 中文字幕亚洲一区二区三区五十路| 亚洲无av在线中文字幕| 中文字幕亚洲欧美日韩高清| 国产精品一区二区久久| 福利视频一区二区| 国产视频亚洲视频| 日韩欧美在线中文字幕| 亚洲黄色有码视频| 欧美午夜无遮挡| 亚洲美女性生活视频| 中国日韩欧美久久久久久久久| 国产精品成人va在线观看| 精品久久久久久久中文字幕| 国产精品高清在线观看| 亚洲美女精品成人在线视频|