真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

本篇內(nèi)容主要講解“PHP怎么獲得輸出緩沖區(qū)的內(nèi)容”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“PHP怎么獲得輸出緩沖區(qū)的內(nèi)容”吧!

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)北屯免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了近千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

 

PHP中的輸出緩沖控制

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

 

清除輸出

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

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

相信有不少小伙伴應(yīng)該見過 ob_start() 這個函數(shù),它的作用就是開始一段輸出緩沖控制。在 ob_start() 之后的代碼中的輸出語句都會進(jìn)入輸出緩沖區(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 中就有了前面兩段 echo 中的內(nèi)容,也就是說,這個一套操作我們就拿到了本身應(yīng)該輸出的內(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() 就可以了,其實(shí)就是相當(dāng)于讓 ob_start() 之后的 echo 這類輸出語句重新生效并正常輸出。

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

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

 

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

這是一個例子,但是可以推廣到其他很功能,比如我們可以用來進(jìn)行全局的輸出過濾、可以做 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 'link

// 
 

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

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

 

到此,相信大家對“PHP怎么獲得輸出緩沖區(qū)的內(nèi)容”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


當(dāng)前題目:PHP怎么獲得輸出緩沖區(qū)的內(nèi)容
網(wǎng)站鏈接:http://weahome.cn/article/ipcjdh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部