亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

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

PHP中的輸出緩沖控制詳解

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

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

清除輸出

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

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

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

獲得輸出緩沖區(qū)的內(nèi)容

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

echo $v;

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

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

echo $v;

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

刷新(輸出)緩沖區(qū)內(nèi)容

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

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

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

ob_implicit_flush();

ob_start();
echo 111, PHP_EOL;
echo "aaaa", PHP_EOL;

使用 ob_implicit_flush() 之后,我們就不需要手動地調(diào)用 ob_flush() 之類的函數(shù)來刷新緩沖區(qū)內(nèi)容了。

一些檢測函數(shù)

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

使用 ob_start() 的回調(diào)函數(shù)來進行輸出緩沖區(qū)的內(nèi)容替換

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

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

最后的輸出結(jié)果就是將 apples 內(nèi)容替換成了 oranges 內(nèi)容。

添加 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() 函數(shù),我們可以在 PHP 輸出的時候為 HTML 的鏈接或者表單代碼增加一個參數(shù)。有沒有想到什么使用場景?POST 表單的 CSRF 攻擊的防范。

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

總結(jié)

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

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

  • flush — 刷新輸出緩沖
  • ob_clean — 清空(擦掉)輸出緩沖區(qū)
  • ob_end_clean — 清空(擦除)緩沖區(qū)并關(guān)閉輸出緩沖
  • ob_end_flush — 沖刷出(送出)輸出緩沖區(qū)內(nèi)容并關(guān)閉緩沖
  • ob_flush — 沖刷出(送出)輸出緩沖區(qū)中的內(nèi)容
  • ob_get_clean — 得到當前緩沖區(qū)的內(nèi)容并刪除當前輸出緩。
  • ob_get_contents — 返回輸出緩沖區(qū)的內(nèi)容
  • ob_get_flush — 刷出(送出)緩沖區(qū)內(nèi)容,以字符串形式返回內(nèi)容,并關(guān)閉輸出緩沖區(qū)。
  • ob_get_length — 返回輸出緩沖區(qū)內(nèi)容的長度
  • ob_get_level — 返回輸出緩沖機制的嵌套級別
  • ob_get_status — 得到所有輸出緩沖區(qū)的狀態(tài)
  • ob_gzhandler — 在ob_start中使用的用來壓縮輸出緩沖區(qū)中內(nèi)容的回調(diào)函數(shù)。ob_start callback function to gzip output buffer
  • ob_implicit_flush — 打開/關(guān)閉絕對刷送
  • 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中的輸出緩沖控制詳解的詳細內(nèi)容,更多關(guān)于PHP 輸出緩沖控制的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • PHP 輸出緩沖控制(Output Control)詳解
  • PHP輸出緩沖控制Output Control系列函數(shù)詳解
  • PHP輸出緩沖與header發(fā)送問題詳解
  • php 輸出緩沖 Output Control用法實例詳解
  • PHP基礎(chǔ)之輸出緩沖區(qū)基本概念、原理分析
  • PHP嵌套輸出緩沖代碼實例
  • php緩沖輸出實例分析
  • php flush類輸出緩沖剖析
  • php中ob(Output Buffer 輸出緩沖)函數(shù)使用方法
  • 剖析 PHP 中的輸出緩沖

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

巨人網(wǎng)絡通訊聲明:本文標題《PHP中的輸出緩沖控制詳解》,本文關(guān)鍵詞  PHP,中的,輸出,緩沖,控制,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP中的輸出緩沖控制詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP中的輸出緩沖控制詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    99久久精品国产片| 亚洲第一色在线| 欧美另类videosbestsex高清| 亚洲第一页色| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 亚洲www美色| 国产极品白嫩美女在线观看看| 免费一级片在线观看| 久久久久久久网| 欧美另类videosbestsex视频| 999久久狠狠免费精品| 国产一区二区精品尤物| 午夜欧美成人久久久久久| 韩国三级香港三级日本三级la| 四虎久久影院| 国产伦精品一区二区三区在线观看| 日韩中文字幕在线观看视频| 91麻豆精品国产片在线观看| 尤物视频网站在线| 日韩在线观看免费| 欧美激情伊人| 成人免费观看的视频黄页| 亚洲天堂在线播放| 国产伦精品一区二区三区无广告| 亚洲精品中文一区不卡| 青青久久国产成人免费网站| 午夜在线亚洲| 99久久精品国产片| 成人免费观看网欧美片| 中文字幕97| 成人a级高清视频在线观看| 欧美a级片视频| 欧美一级视频高清片| 亚洲精品久久久中文字| 天天做人人爱夜夜爽2020毛片| 韩国毛片 免费| 91麻豆国产| 日本在线播放一区| 99久久视频| 99热热久久| 国产高清在线精品一区二区| 中文字幕Aⅴ资源网| 国产激情视频在线观看| 国产精品123| 国产不卡高清在线观看视频| 黄视频网站在线免费观看| 99热热久久| 国产91精品一区二区| 色综合久久手机在线| 国产亚洲男人的天堂在线观看| 久久久成人网| 欧美a级片视频| 久久久成人影院| 国产原创中文字幕| a级精品九九九大片免费看| 欧美激情一区二区三区在线| 国产一区二区福利久久| 国产麻豆精品hdvideoss| 精品视频一区二区三区免费| 国产一区二区高清视频| 九九热国产视频| 国产成人精品综合久久久| 九九久久99综合一区二区| 青青久久网| 亚洲女人国产香蕉久久精品| 一级女性大黄生活片免费| 黄色短视频网站| 久久精品人人做人人爽97| 久久99欧美| 欧美爱爱网| 精品视频在线看| 欧美另类videosbestsex久久| 精品国产亚洲一区二区三区| 精品久久久久久免费影院| 美女免费精品视频在线观看| 可以免费看毛片的网站| 天天做人人爱夜夜爽2020| 国产成人精品在线| 国产伦精品一区二区三区在线观看| 四虎精品在线观看| 国产成人精品综合在线| 日日夜人人澡人人澡人人看免| 久久久久久久网| 国产国产人免费视频成69堂| 成人在免费观看视频国产| 天天色色色| 成人免费高清视频| 韩国三级香港三级日本三级la| 一级女性全黄久久生活片| 亚欧乱色一区二区三区| 亚欧成人乱码一区二区| 久草免费在线视频| 精品美女| 日本乱中文字幕系列| 国产网站麻豆精品视频| 韩国三级视频网站| 成人免费一级纶理片| 台湾毛片| 99色视频在线观看| 91麻豆高清国产在线播放| 日本免费乱理伦片在线观看2018| 免费毛片基地| 成人影院久久久久久影院| 日韩免费在线视频| 在线观看成人网 | 精品毛片视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 欧美a级片视频| 青青久在线视频| 尤物视频网站在线| 99久久精品国产国产毛片| 成人a级高清视频在线观看| 欧美国产日韩在线| 在线观看导航| 青青久久网| 欧美国产日韩一区二区三区| 国产福利免费视频| 久久精品道一区二区三区| 欧美α片无限看在线观看免费| 精品国产一区二区三区久 | 超级乱淫伦动漫| 欧美a级大片| 99久久精品国产国产毛片| 精品视频在线看| 午夜家庭影院| 国产一区二区精品久久91| 日韩男人天堂| 日本特黄特色aa大片免费| 国产91视频网| 精品视频免费看| 久久国产精品自线拍免费| 免费一级片在线| 精品国产一区二区三区精东影业 | 久久久久久久久综合影视网| 高清一级淫片a级中文字幕| 一本伊大人香蕉高清在线观看| 国产91丝袜在线播放0| 成人a级高清视频在线观看| 精品国产亚一区二区三区| 亚洲第一色在线| 精品国产一区二区三区久 | 国产高清在线精品一区a| 久久久成人网| 国产美女在线观看| 久久成人综合网| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 九九免费高清在线观看视频| 日韩av东京社区男人的天堂| 精品国产香蕉伊思人在线又爽又黄| 国产一区二区精品尤物| 日本在线播放一区| 免费毛片基地| 毛片高清| 亚洲第一视频在线播放| 国产国产人免费视频成69堂| 亚洲天堂免费观看| 成人av在线播放| 青青久在线视频| 一本高清在线| 久草免费在线观看| 你懂的国产精品| 九九精品在线| 久久久久久久网| 日日日夜夜操| 麻豆网站在线看| 精品国产三级a| 99色视频| 欧美爱色| 国产欧美精品午夜在线播放| 日本乱中文字幕系列| 欧美激情一区二区三区在线播放| 国产网站麻豆精品视频| 精品久久久久久中文字幕2017| 国产成人精品综合在线| 成人免费高清视频| 国产视频久久久久| 麻豆网站在线免费观看| 二级片在线观看| 国产麻豆精品视频| 日本免费乱人伦在线观看| 九九免费高清在线观看视频| 天天做日日爱| 国产伦理精品| 国产伦久视频免费观看视频| 韩国毛片基地| 韩国三级视频在线观看| 99热精品在线| 毛片电影网| 超级乱淫伦动漫| 精品视频一区二区| 青青久久国产成人免费网站| 色综合久久天天综合| 精品在线观看国产| 国产成a人片在线观看视频| 一a一级片| 成人高清视频在线观看| 黄色福利片| 成人免费一级毛片在线播放视频| 精品国产三级a∨在线观看| 精品视频在线观看免费|