PHP 輸出快取
一般的PHP指令碼中,PHP標籤之外的任何HTML語句將會傳送到瀏覽器客戶端,而預設的PHP的echo,print之類的輸出將會被快取.當快取達到特定的大小或頁面指令碼執行,或強行重新整理緩衝區才會傳送到瀏覽器客戶端.
比如,下面程式碼會迴圈完後再把輸出發往瀏覽器
for($i=0; $i!=3;++$i)
{
echo date('Y-m-d h:i:s').'<br/>';
sleep(1);
}
php.ini的outputing_buffer欄位預設是4096,表示快取的大小,如果大於該值則會像瀏覽器客戶端輸出.該值可以修改.
但有時需求對輸出進行嚴格控制.就比如我想輸出了100k的資料,但是想一次連續的傳送到客戶端,想壓縮要傳輸的資料.php可以對輸出快取進行控制,常見的函式有:
ob_start():啟動輸出快取.
ob_get_contents():得到快取內容字串.
ob_flush():重新整理快取.
flush():重新整理快取,php重新整理快取必須是同時呼叫ob_flush和flush.除非呼叫ob_implicit_flush(true).
ob_implicit_flush(true/false):開啟關閉絕對重新整理快取方式.如果為true,則手動重新整理快取時只要呼叫ob_flush,反之除了呼叫ob_flush還要呼叫flush.
ob_clean():清空快取,不關閉快取.
ob_end_flush():重新整理快取,清空並關閉快取.
ob_end_clean():重新整理快取,清空並關閉快取.
php會在指令碼執行時自動關閉快取.所以可以不用顯示呼叫ob_end_xxx.但良好的風格不應該省略這些.而且ob_start應該是和這些ob_end_xx一一對應的.
下面的程式碼展示鎖住緩衝區一起輸出:下面的輸出將一起在web上顯示,也就是一起重新整理到瀏覽器.儘管他超過了預設設定的緩衝區大小.
<?php
ob_start();
for($i=0; $i!=10240;++$i)
{
echo '1';
if($i == 4096)
{
echo '<br/><br/>';
sleep(3);
}
}
ob_end_flush();
?>
下面的程式碼是演示控制指令碼每輸出一次,就重新整理快取向瀏覽器傳送資料.
<?php
// ob_implicit_flush(true);
ob_flush();
flush();
for($i=0; $i!=3;++$i)
{
echo date('Y-m-d h:i:s').'<br/>';
ob_flush();
flush();
sleep(1);
}
?>
上面每迴圈一次就會向瀏覽器重新整理一次當前時間.瀏覽器裡的頁面會無重新整理的每隔1秒多顯示一條資料.
如果把上面註釋的ob_implicit_flush(true)啟用,則可不用書寫ob_flush()後的flush().
相關文章
- 系統快取全解析2:頁面輸出快取快取
- 高速輸出-我們戲說快取快取
- asp.net輸出快取的使用ASP.NET快取
- 關於GD和OB快取的輸出快取
- [php]禁用快取PHP快取
- PHP快取之Opcode快取PHP快取
- ASP.NET 2.0中的頁面輸出快取ASP.NET快取
- php獲取輸入流PHP
- .NET Petshop詳解(五):petshop輸出快取設定 (轉)快取
- Redis快取php資料Redis快取PHP
- 深入Nginx + PHP 快取詳解NginxPHP快取
- 2PHP頁面快取PHP快取
- php nginx 實時輸出PHPNginx
- PHP APCu快取使用與避坑PHP快取
- php 之讀取鍵盤輸入PHP
- PHP的輸出緩衝區PHP
- 你不知道的 PHP 快取技巧PHP快取
- PHP擴充套件快取加速安裝PHP套件快取
- 在asp.net web api中利用過濾器設定輸出快取ASP.NETWebAPI過濾器快取
- PHP 安全輸入輸出方式 「防止 XSS 注入」PHP
- 快取穿透、快取擊穿、快取雪崩、快取預熱快取穿透
- Linux c程式中獲取shell指令碼輸出(如獲取system命令輸出)LinuxC程式指令碼
- PHP 輸出緩衝區應用PHP
- php除錯——輸出變數值PHP除錯變數
- ASP.NET2.0揭祕讀書筆記之八——頁面輸出快取ASP.NET筆記快取
- 快取穿透、快取擊穿、快取雪崩快取穿透
- 快取穿透、快取雪崩、快取擊穿快取穿透
- php 快取使用監控測試程式碼PHP快取
- PHP遞迴方式刪除快取檔案PHP遞迴快取
- PHP 中 9 大快取技術總結PHP快取
- .Net 下通過快取提高TCP傳輸速度快取TCP
- Redis快取擊穿、快取穿透、快取雪崩Redis快取穿透
- HTTP快取——協商快取(快取驗證)HTTP快取
- [Redis]快取穿透/快取擊穿/快取雪崩Redis快取穿透
- 快取穿透 快取雪崩快取穿透
- 快取問題(一) 快取穿透、快取雪崩、快取併發 核心概念快取穿透
- PHP輸出金字塔及空心菱形PHP
- 快取穿透、快取擊穿、快取雪崩區別快取穿透