程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 使用ob_start緩沖輸出做簡單緩存

使用ob_start緩沖輸出做簡單緩存

編輯:關於PHP編程

PHP ob_start()函數是一個功能強大的函數,可以幫助我們處理許多問題。

Output Control 函數可以讓你自由控制腳本中數據的輸出。它非常地有用,特別是對於:當你想在數據已經輸出後,再輸出文件頭的情況。輸出控制函數不對使用header() 或setcookie(), 發送的文件頭信息產生影響,只對那些類似於echo() 和PHP 代碼的數據塊有作用。

所有對header()函數有了解的人都知道,這個函數會發送一段文件頭給浏覽器,但是如果在使用這個函數之前已經有了任何輸出(包括空輸出,比如空格,回車和換行)就會提示出錯。如果我們去掉第一行的ob_start(),再執行此程序,我們會發現得到了一條錯誤提示:"Header had all ready send by"!但是加上ob_start,就不會提示出錯,原因是當打開了緩沖區,echo後面的字符不會輸出到浏覽器,而是保留在服務器,直到你使用flush或者ob_end_flush才會輸出,所以並不會有任何文件頭輸出的錯誤!

下面介紹下如何使用ob_start做簡單緩存。

<?php
$time1 = microtime(true);
for($i = 0;$i < 9999;$i++)
{
	//echo $i.'<br />';
}

echo "<br />";
$time2 = microtime(true);
echo $time2 -$time1;

// 輸出 0.0010678768158
?>

沒做緩存的時候,運行時間為 0.0010678768158。

1. 簡單緩存

<?php
$time1 = microtime(true);
$cache_file = "file.txt";
if(file_exists($cache_file))
{
	$info = file_get_contents($cache_file);
	echo $info;
	$time2 = microtime(true);
	echo $time2 -$time1;
	exit();
}
ob_start();
for($i = 0;$i < 9999;$i++)
{
	//echo $i;
}
echo "<br />";
$info = ob_get_contents();
file_put_contents($cache_file ,$info);
$time2 = microtime(true);
echo $time2 -$time1;

// 輸出 0.00075888633728
?>

沒做緩存耗時 0.001秒,做了簡單緩存則為 0.0007秒,緩存後速度稍有提升。

2. 進一步緩存

在前面緩存的基礎上進一行加深。大家都知道,js文件不僅不耗費服務器的資源,同時會被下載到客戶端,秩序下載一次,之後就不消耗帶寬了,缺點就是不可以被搜索引擎抓到包,但是對於辦公系統來說,是一個非常好的選擇。

<?php
$time1 = microtime(true);
function htmltojs($str)
{
	$re='';
	$str=str_replace('\','\\',$str);
	$str=str_replace("'","'",$str);
	$str=str_replace('"','"',$str);
	$str=str_replace('t','',$str);
	$str= split("rn",$str);       //已分割成數組
	for($i=0;$i < count($str); $i++)
	{
		$re.="document.writeln("".$str[$i]."");rn";   //加上js輸出
	}
	$re = str_replace("");
	document.writeln("","",$re);
	return $re;
}

$cache_file = "file.js";
if(file_exists($cache_file))
{
	$info = file_get_contents($cache_file);
	show_script($cache_file);
	$time2 = microtime(true);
	echo $time2 -$time1;
	exit();
}
ob_start();
for($i = 0;$i < 9999;$i++)
{
	//echo $i;
}
echo "<br />";
$info = ob_get_contents();
$info = htmltojs($info);
file_put_contents($cache_file ,$info);
$time2 = microtime(true);
echo $time2 -$time1;
?>

只是簡單地提供一個緩存的思路。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved