婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP中的輸出緩沖控制詳解

PHP中的輸出緩沖控制詳解

熱門標簽:常州地圖標注服務商 衡水外呼系統平臺 新河科技智能外呼系統怎么樣 安裝電銷外呼系統 福州人工外呼系統哪家強 百度商鋪地圖標注 釘釘打卡地圖標注 注冊400電話申請 地圖標注平臺怎么給錢注冊

在 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;
// 3

echo ob_get_level(), PHP_EOL;
// 2

print_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 links
echo 'a href="file.php" rel="external nofollow" >link/a>
a  rel="external nofollow"  rel="external nofollow" >link2/a>';

// a href="file.php?var=value" rel="external nofollow" >link/a>
// a  rel="external nofollow"  rel="external nofollow" >link2/a>

// a form
echo '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 輸出緩沖控制(Output Control)詳解
  • PHP輸出緩沖控制Output Control系列函數詳解
  • PHP輸出緩沖與header發送問題詳解
  • php 輸出緩沖 Output Control用法實例詳解
  • PHP基礎之輸出緩沖區基本概念、原理分析
  • PHP嵌套輸出緩沖代碼實例
  • php緩沖輸出實例分析
  • php flush類輸出緩沖剖析
  • php中ob(Output Buffer 輸出緩沖)函數使用方法
  • 剖析 PHP 中的輸出緩沖

標簽:柳州 六安 唐山 鷹潭 克拉瑪依 遼陽 鶴崗 白城

巨人網絡通訊聲明:本文標題《PHP中的輸出緩沖控制詳解》,本文關鍵詞  PHP,中的,輸出,緩沖,控制,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP中的輸出緩沖控制詳解》相關的同類信息!
  • 本頁收集關于PHP中的輸出緩沖控制詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    中文字幕一区三区| 亚洲第一av色| 日韩成人午夜电影| 99re热视频这里只精品| 欧美大片一区二区| 午夜影院久久久| 亚洲精品在线免费观看视频| 亚洲一区二区偷拍精品| 国产毛片精品视频| 欧美色欧美亚洲另类二区| 久久综合九色欧美综合狠狠 | 国产精品欧美一区喷水| 国产大陆精品国产| 久久综合成人精品亚洲另类欧美 | 欧美mv和日韩mv国产网站| 久久久国产一区二区三区四区小说 | 91欧美一区二区| 亚洲国产欧美在线| 久久婷婷综合激情| 欧美在线观看你懂的| 麻豆国产欧美一区二区三区| 中文字幕乱码久久午夜不卡 | 日本一区二区高清| 9久草视频在线视频精品| 亚洲成av人综合在线观看| 日韩精品一区二区在线观看| 成人综合婷婷国产精品久久 | 国产亚洲精品精华液| av电影在线观看一区| 日本不卡视频一二三区| 国产精品无码永久免费888| 色婷婷香蕉在线一区二区| 激情文学综合插| 日韩精品三区四区| 亚洲乱码一区二区三区在线观看| 久久综合九色综合97婷婷女人| 日韩欧美国产一区二区在线播放| 在线观看亚洲一区| 欧美高清性hdvideosex| 欧美疯狂做受xxxx富婆| 91国模大尺度私拍在线视频| 色综合久久中文综合久久97| 成人三级在线视频| 91在线一区二区三区| 欧美日韩国产成人在线免费| 欧美丝袜自拍制服另类| 欧美男生操女生| 欧美不卡一区二区| 亚洲特级片在线| 麻豆视频一区二区| 色就色 综合激情| 欧美一级免费观看| 国产欧美精品国产国产专区| 一区免费观看视频| 狠狠狠色丁香婷婷综合激情| 91影视在线播放| 亚洲精品在线电影| 亚洲女人小视频在线观看| 麻豆91精品视频| 欧美日韩一二三区| 中文字幕一区二区三区av| 国产一区二区导航在线播放| 欧美日精品一区视频| 国产精品视频一区二区三区不卡| 亚洲超碰精品一区二区| 成人av在线看| 国产欧美一区二区在线| 日本视频一区二区| 欧美精选一区二区| 亚洲精品一二三区| 色综合久久久网| 1024国产精品| 一本大道久久a久久精品综合| 久久亚洲一级片| av在线不卡电影| 国产精品美女久久久久久久| 99久久亚洲一区二区三区青草| 国产日韩精品一区二区浪潮av| 国产精品资源站在线| 欧美电视剧在线看免费| 黄一区二区三区| 国产精品美女www爽爽爽| 色综合 综合色| 午夜精品福利在线| 国产午夜精品久久久久久久| 精品一区二区精品| 国产精品乱人伦中文| 成人的网站免费观看| 成人高清在线视频| 国产精品乱码一区二区三区软件| 亚洲制服欧美中文字幕中文字幕| 国产精品自拍在线| 亚洲成人av福利| 欧美成人r级一区二区三区| 捆绑变态av一区二区三区| 国产精品狼人久久影院观看方式| 国产一区二区成人久久免费影院| 亚洲欧洲99久久| 国产精品视频一区二区三区不卡| 欧美日韩一区二区三区视频 | 成人性视频免费网站| 亚洲丰满少妇videoshd| 欧美精品一区二| 色拍拍在线精品视频8848| 韩国精品主播一区二区在线观看| 亚洲乱码国产乱码精品精可以看| 精品日韩一区二区三区免费视频| 91麻豆免费观看| 91看片淫黄大片一级在线观看| 国产精品99久久久久久似苏梦涵 | 7878成人国产在线观看| 国产.精品.日韩.另类.中文.在线.播放 | 亚洲成人一区二区| 亚洲黄色免费电影| 夜夜嗨av一区二区三区网页 | 蜜桃视频第一区免费观看| 中文字幕av免费专区久久| 久久久久久电影| 91精品国产综合久久精品图片| 91小视频免费看| 在线观看日韩国产| 欧美一级片免费看| 日韩欧美精品三级| 日韩欧美国产一区在线观看| 欧美不卡视频一区| 欧美α欧美αv大片| 欧美成人一区二区三区片免费| 欧美r级电影在线观看| 在线播放视频一区| 久久综合狠狠综合久久激情| 欧美激情一区二区三区在线| 亚洲色图另类专区| 亚洲成a人在线观看| 久久99久久精品欧美| 精品在线播放免费| 国产高清不卡一区| 色香色香欲天天天影视综合网 | 国产丶欧美丶日本不卡视频| 精品一区二区免费| 粉嫩欧美一区二区三区高清影视| 亚洲欧洲日本在线| 日韩毛片视频在线看| 理论电影国产精品| 91日韩精品一区| 欧美α欧美αv大片| 亚洲婷婷综合久久一本伊一区| 五月天中文字幕一区二区| 香蕉影视欧美成人| 欧美日韩精品欧美日韩精品一综合| 丁香婷婷综合色啪| 精品噜噜噜噜久久久久久久久试看| 午夜欧美在线一二页| 不卡大黄网站免费看| 91在线视频18| 精品国产第一区二区三区观看体验 | 国产欧美日韩精品在线| 激情综合色综合久久| 91精品国产综合久久精品 | 亚洲国产精品自拍| 91网站黄www| 亚洲激情成人在线| 欧美性受极品xxxx喷水| 国产精品亲子乱子伦xxxx裸| 成人听书哪个软件好| 亚洲综合偷拍欧美一区色| 色一情一乱一乱一91av| 2021中文字幕一区亚洲| 国产电影一区二区三区| 久久综合资源网| 国产一区二区三区不卡在线观看| 日韩美女天天操| 欧美午夜精品理论片a级按摩| 久久久一区二区三区捆绑**| 国产精品99久久久久久久女警| 欧美精品一区二区高清在线观看| 国产精品中文字幕日韩精品| 国产精品传媒视频| 播五月开心婷婷综合| 亚洲欧美一区二区三区国产精品 | 久久国产尿小便嘘嘘尿| 亚洲日本成人在线观看| 精品国产乱码久久| 91麻豆精品国产自产在线| 一本久道中文字幕精品亚洲嫩 | 日本一二三四高清不卡| 91精品国产综合久久久久久 | 欧美精品乱码久久久久久按摩| k8久久久一区二区三区| 精品一二三四区| 日本vs亚洲vs韩国一区三区二区| 亚洲视频一区在线观看| 国产精品精品国产色婷婷| 国产欧美日韩视频一区二区| 日韩精品在线网站| 久久老女人爱爱| 综合久久久久久| 国产精品伦理一区二区| 亚洲精选免费视频| 国产成人精品www牛牛影视| 国产乱人伦精品一区二区在线观看|