日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP中的輸出緩沖控制詳解

瀏覽:29日期:2022-09-07 16:17:20

在 PHP 中,我們直接進行 echo 、 或者 print_r 的時候,輸出的內容就會直接打印出來。但是,在某些情況下,我們并不想直接打印,這個時候就可以使用輸出緩沖控制來進行輸出打印的控制。當然,這一套功能并不僅限出針對打印的內容,我們還可以做其它一些操作,這個我們放到最后再說。

清除輸出

首先,我們先來看看不讓 echo 之類的內容打印輸出。

ob_start();echo 111, PHP_EOL;echo 'aaaa', PHP_EOL;ob_end_clean();

相信有不少小伙伴應該見過 ob_start() 這個函數,它的作用就是開始一段輸出緩沖控制。在 ob_start() 之后的代碼中的輸出語句都會進入輸出緩沖區,這個時候,如果我們調用了 ob_end_clean() 、 ob_clean() 或者 ob_get_clean() ,則不會有任何輸出了。它們三個的作用都是清除輸出緩沖區的內容。具體的區別大家可以參考文章最后給出的函數說明或者官方文檔。

獲得輸出緩沖區的內容

ob_start();echo 111, PHP_EOL;echo 'aaaa', PHP_EOL;$v = ob_get_contents();ob_end_clean();echo $v;

上面說過,使用了 ob_end_clean() 就會清除輸出緩沖區里面的內容,但是在這段代碼中,我們使用 ob_get_contents() 函數直接將緩沖區的內容賦值給了變量 v 。這時候,v。這時候,v 中就有了前面兩段 echo 中的內容,也就是說,這個一套操作我們就拿到了本身應該輸出的內容,并將它保存在了變量中。這樣做有什么用呢?我們可以獲得類似于 phpinfo() 、 var_dump() 這些直接輸出函數的內容了,并且不會打印在客戶端屏幕上。比如:

ob_start();php_info();$v = ob_get_contents();ob_end_clean();echo $v;

在 $v 中的內容就是 php_info() 的內容了。這就是輸出緩沖控制的第二個能力。

刷新(輸出)緩沖區內容

ob_start();echo 111, PHP_EOL;echo 'aaaa', PHP_EOL;flush();ob_flush();

類似的,我們在緩沖區中想要再次直接輸出內容,使用 flush() 、ob_flush() 、 ob_end_flush() 及 ob_get_flush() 就可以了,其實就是相當于讓 ob_start() 之后的 echo 這類輸出語句重新生效并正常輸出。

另外,我們還可以使用一個函數進行自動的刷新。

ob_implicit_flush();ob_start();echo 111, PHP_EOL;echo 'aaaa', PHP_EOL;

使用 ob_implicit_flush() 之后,我們就不需要手動地調用 ob_flush() 之類的函數來刷新緩沖區內容了。

一些檢測函數

ob_start();ob_start();echo 123, PHP_EOL;echo ob_get_length(), PHP_EOL;// 3echo ob_get_level(), PHP_EOL;// 2print_r(ob_get_status(true));// Array// (// [0] => Array// (// [name] => default output handler// [type] => 0// [flags] => 112// [level] => 0// [chunk_size] => 0// [buffer_size] => 16384// [buffer_used] => 0// )// [1] => Array// (// [name] => default output handler// [type] => 0// [flags] => 112// [level] => 1// [chunk_size] => 0// [buffer_size] => 16384// [buffer_used] => 17// )// )ob_get_flush();

ob_get_length() 會返回當前緩沖區里面內容的長度,這里我們只打印了一個 123 ,在緩沖區中保存了3個字符,所以輸出的正是 3 。ob_get_level() 返回的是當前緩沖區的層級,請注意,我們在上面調用了兩次 ob_start() ,也就是有兩層的緩沖區,這個緩沖區是可以嵌套的。ob_get_status() 函數是緩沖區的狀態信息,字段的說明可以查看官方文檔,這里不再贅述。

使用 ob_start() 的回調函數來進行輸出緩沖區的內容替換

這是一個例子,但是可以推廣到其他很功能,比如我們可以用來進行全局的輸出過濾、可以做 CSS 或 JS 文件的壓縮優化等等。

ob_start(function($text){ return (str_replace('apples', 'oranges', $text));});echo 'It’s like comparing apples to oranges', PHP_EOL;ob_get_flush();// It’s like comparing oranges to oranges

最后的輸出結果就是將 apples 內容替換成了 oranges 內容。

添加 URL 重寫器

output_add_rewrite_var(’var’, ’value’);// some linksecho ’<a href='http://m.b3g6.com/bcjs/file.php' rel='external nofollow' >link</a><a rel='external nofollow' rel='external nofollow' >link2</a>’;// <a href='http://m.b3g6.com/bcjs/file.php?var=value' rel='external nofollow' >link</a>// <a rel='external nofollow' rel='external nofollow' >link2</a>// a formecho ’<form action='script.php' method='post'><input type='text' name='var2' /></form>’;// <form action='script.php' method='post'>// <input type='hidden' name='var' value='value' />// <input type='text' name='var2' />// </form>

上面的代碼看出什么端倪了嘛?沒錯,使用 output_add_rewrite_var() 函數,我們可以在 PHP 輸出的時候為 HTML 的鏈接或者表單代碼增加一個參數。有沒有想到什么使用場景?POST 表單的 CSRF 攻擊的防范。

這個函數會根據 php.ini 文件中的 url_rewriter.tags 配置項來進行添加,在默認情況下這個配置項只支持 from 表單,同時,它還可以支持 a 標簽的href 、 area標簽的href 、 frame標簽的src 、 input標簽的src 等等。也就是說,會在這些標簽相對應的屬性中自動添加字段。當然,它也有一個反函數 output_reset_rewrite_vars() 用于取消之前增加的這個參數。

總結

關于輸出緩沖控制這塊還有很多好玩的東西,不過限于篇幅我們先介紹到這里,將來?到什么好的功能的應用我們再單獨講解。現在基于 Swoole 的應用越來越多,當我們需要將 TP 、 Laravel 這類傳統框架轉換成支持 Swoole 的時候,往往就需要在入口文件使用輸出緩沖控制來進行修改。因為傳統框架基本都是直接進行 echo 之類的輸出的,而在 Swoole 中,echo 這類的內容是直接打印在控制臺的,這就需要我們通過 ob_get_contents() 能力獲得全部的輸出再通過 response->end() 來進行實際的響應。另外,還有一些其他的場景也會用到輸出緩沖控制:

1.在PHP中,像header(), session_start(), setcookie() 等這樣的發送頭文件的函數前,不能有任何的輸出,而利用輸出緩沖控制函數可以在這些函數前進行輸出而不報錯2.對輸出的內容進行處理,例如生成靜態緩存文件、進行gzip壓縮輸出,這算是較常用的功能了3.捕獲一些不可獲取的函數輸出,例如phpinfo(), var_dump() 等等,這些函數都會將運算結果顯示在瀏覽器中,而如果我們想對這些結果進行處理,則用輸出緩沖控制函數是個不錯的方法。說的通俗點,就是這類函數都不會有返回值,而要獲取這些函數的輸出數據,就要用到輸出緩沖控制函數4.對一些數據進行實時的輸出最后,再給出輸出緩沖控制相關的函數說明,具體內容大家還是要多看官方文檔的介紹。

flush — 刷新輸出緩沖 ob_clean — 清空(擦掉)輸出緩沖區 ob_end_clean — 清空(擦除)緩沖區并關閉輸出緩沖 ob_end_flush — 沖刷出(送出)輸出緩沖區內容并關閉緩沖 ob_flush — 沖刷出(送出)輸出緩沖區中的內容 ob_get_clean — 得到當前緩沖區的內容并刪除當前輸出緩。 ob_get_contents — 返回輸出緩沖區的內容 ob_get_flush — 刷出(送出)緩沖區內容,以字符串形式返回內容,并關閉輸出緩沖區。 ob_get_length — 返回輸出緩沖區內容的長度 ob_get_level — 返回輸出緩沖機制的嵌套級別 ob_get_status — 得到所有輸出緩沖區的狀態 ob_gzhandler — 在ob_start中使用的用來壓縮輸出緩沖區中內容的回調函數。ob_start callback function to gzip output buffer ob_implicit_flush — 打開/關閉絕對刷送 ob_list_handlers — 列出所有使用中的輸出處理程序。 ob_start — 打開輸出控制緩沖 output_add_rewrite_var — 添加URL重寫器的值(Add URL rewriter values) output_reset_rewrite_vars — 重設URL重寫器的值(Reset URL rewriter values) 測試代碼:

github.com/zhangyue050…

以上就是PHP中的輸出緩沖控制詳解的詳細內容,更多關于PHP 輸出緩沖控制的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆久久一区| 三级久久三级久久久| 国产精品www.| 精品三级在线观看视频| 欧美freesex黑人又粗又大| 久久国产成人午夜av影院宅| 欧美va天堂在线| 美国三级日本三级久久99 | 午夜欧美巨大性欧美巨大| 99久久视频| 亚洲欧美日韩在线观看a三区 | 日韩三级一区| 日韩精品第一| 国产精品国产三级国产在线观看| 国产专区一区| 久久国产人妖系列| 激情亚洲影院在线观看| 夜夜嗨一区二区| 毛片不卡一区二区| 欧美在线亚洲| 国产精品久久久久av蜜臀| 午夜av成人| 国产精品qvod| 先锋影音国产一区| 丰满少妇一区| 日韩黄色免费网站| 99视频精品视频高清免费| 综合干狼人综合首页| 国产videos久久| 亚洲精品中文字幕99999| 亚洲高清久久| 国产精品原创| 国产日韩欧美中文在线| 激情久久久久久久| 美腿丝袜在线亚洲一区| 亚洲综合婷婷| 九九精品调教| 久久国产日本精品| caoporn视频在线| 中国字幕a在线看韩国电影| 毛片在线网站| 久久国产电影| 福利片在线一区二区| 亚洲国产专区校园欧美| 国产精品成人一区二区不卡| 久久久久久久久丰满| 另类中文字幕国产精品| 久久精品播放| 亚洲欧洲一区| 亚洲精品进入| 麻豆一区二区三区| 精品视频一二| 免费成人网www| 亚洲永久精品唐人导航网址| 欧美天堂在线| 久久99性xxx老妇胖精品| 在线亚洲人成| www.51av欧美视频 | 久久一区欧美| 精精国产xxxx视频在线野外| 久久亚洲成人| 日本aⅴ亚洲精品中文乱码| 国产美女视频一区二区| 日韩电影免费网站| 日韩在线观看一区二区| 欧美一区在线观看视频| 玖玖玖国产精品| 国产精品亚洲成在人线| 精品高清久久| 国产探花一区二区| 狂野欧美性猛交xxxx| 亚洲精品字幕| 国产欧美日韩一级| 成人精品国产亚洲| 韩日一区二区三区| 亚洲日韩视频| 国产一区二区色噜噜| 在线精品视频在线观看高清| 中文字幕av亚洲精品一部二部| 国产欧美另类| 香蕉人人精品| 欧美久久一区二区三区| 精品视频久久| av不卡在线看| 国产一区福利| 蜜桃传媒麻豆第一区在线观看 | 美日韩精品视频| 青青草国产精品亚洲专区无| 国产一区二区三区免费在线| 99久久www免费| 国产精品三p一区二区| 欧美精品一线| 国产一区二区精品福利地址| 美女久久网站| 日韩免费看片| 日本少妇一区二区| 亚洲欧美日韩高清在线| 久久久久九九精品影院| 亚洲大全视频| 黄色网一区二区| 色综合视频一区二区三区日韩| 日韩成人三级| 国产成人精品三级高清久久91| 亚洲理论在线| 午夜亚洲一区| 亚洲高清av| 欧美日韩精品免费观看视完整| 欧美精品国产| 亚洲啊v在线免费视频| 久久久成人网| 新版的欧美在线视频| 风间由美中文字幕在线看视频国产欧美| 中文精品电影| 国内精品福利| 欧美.日韩.国产.一区.二区| 97精品一区二区| 国产一区不卡| 国模精品一区| 国产精品对白| 国产精品玖玖玖在线资源| 欧美偷窥清纯综合图区| 国产精品v一区二区三区| 91在线成人| 牛牛精品成人免费视频| 欧美激情久久久久久久久久久| 国产日韩欧美在线播放不卡| 亚洲精品看片| 亚洲人成精品久久久| 欧美日韩日本国产亚洲在线| 免费国产自久久久久三四区久久 | 亚洲一区二区三区无吗| 日韩有吗在线观看| 国产精品香蕉| 国产乱论精品| 精品伊人久久久| 国产精品2区| 精品亚洲成人| 久久福利在线| 免费看av不卡| 国产精品美女久久久浪潮软件| 亚洲精华国产欧美| 成人看片网站| 国产精品呻吟| 国产精品一区二区中文字幕| 久久久精品国产**网站| 成人羞羞在线观看网站| 一区三区视频| 国产精品最新| 精品国模一区二区三区| 亚洲色图网站| 国产伊人久久| 亚洲97av| 日韩不卡免费高清视频| 日韩欧美中文字幕在线视频| 麻豆一区二区三区| 国产精品日韩| 欧美亚洲tv| 在线国产一区二区| 国产剧情一区| 先锋亚洲精品| 欧美久久天堂| 国产亚洲一区二区三区啪| 亚洲成av在线| 久久爱www成人| 亚洲一区欧美二区| 国精品产品一区| 日本不卡在线视频| aⅴ色国产欧美| 日韩伦理在线一区| 国产精品夜夜夜| 欧美一区=区| 国产精品嫩模av在线| 久久精品欧美一区| 麻豆成人在线观看| 日本久久一区| 视频在线观看一区| 欧美中文字幕一区二区| 91偷拍一区二区三区精品| 国产精东传媒成人av电影| 日韩国产欧美在线视频| 蜜桃视频在线观看一区| 亚洲激情二区| 99久久久久国产精品| 久久久蜜桃一区二区人| 98精品视频| 91精品一区二区三区综合在线爱| 日韩精品一级| 日韩一区中文| 97久久中文字幕| 国产日韩一区二区三区在线播放| 日韩在线观看中文字幕| 久久午夜视频| 亚洲资源网站| 日本aⅴ亚洲精品中文乱码| 色8久久久久| 国产乱人伦精品一区| 麻豆免费精品视频| 精品视频一区二区三区在线观看 | 中文另类视频| 999国产精品永久免费视频app|