Heim php教程 php手册 php页面缓存方法小结

php页面缓存方法小结

Jun 06, 2016 pm 08:14 PM
php 方法 缓存 页面

这篇文章主要介绍了php页面缓存方法,实例总结了常用的页面缓存函数的用法,并给出了一个完整的缓存实例,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例总结了php页面缓存方法。分享给大家供大家参考。具体分析如下:

在php页面缓存主要用到的是ob系列函数,如ob_start(),ob_end_flush(),ob_get_contents(),但是更高级的缓存是不使用这些函数的,本文最后会举一个实例加以说明.

先来看看缓存常用的ob系列函数:

ob_start():页面缓存开始的标志,此函数一下的内容直至ob_end_flush()或者ob_end_clean()都保存在页面缓存中;

ob_get_contents():用来获取页面缓存中的内容,获取到以后呢,我们就可以想怎么处理这些内容都行了,过滤字段啦,匹配内容啦,都可以~~~

ob_end_flush():表示页面缓存结束,并且经我验证,缓存的内容将输出到当前页面上,也就是可以显示缓存内容.

用此三个php函数,就可以实现强大的功能,如果数据库查询量较大,可以用cache来解决这个问题.

下面是编码部分.

1.初始化函数,一般是设置页面缓存路径、缓存文件命名格式等,可按个人喜好自定义,这里用到的识别ID是经加密的$_SERVER[REQUEST_URI]参数,这个函数中最后还有一个if判断,若未过缓存期,则加载缓存文件,否则加载源文件,代码如下:

复制代码 代码如下:

function page_init()
{    
     $url = $_SERVER['REQUEST_URI'];//子url,该参数一般是唯一的
     $pageid = md5($url);
     $dir = str_replace('http://www.jb51.net/','_',substr($_SERVER['SCRIPT_NAME'],1,-4));
         //目录命名方式,如exp_index
     if(!file_exists($pd = PAGE_PATH.$dir.'http://www.jb51.net/'))@mkdir($pd,0777) or die("$pd目录创建失败");
         //如cache/page/exp_index/
     define('PAGE_FILE',$pd.$pageid.'.html');
       //如cache/page/exp_index/cc8ef22b405566745ed21305dd248f0e.html
     $contents = file_get_contents(PAGE_FILE);//读出
 
     if($contents && substr($contents, 13, 10) > time() )//对应page_cache()函数中加上的自定义头部
     {
         echo substr($contents, 27);
         exit(0);
     }
     return true;    
}


2.页面缓存函数,这里使用到一个技巧,在缓存文件的内容中加上一个头部信息--过期时间,所以每次只需要对头部中的过期时间和当前时间进行比较,在page_init()函数中进行,就能判断缓存是否过期了,代码如下:

复制代码 代码如下:

function page_cache($ttl = 0)
{
     $ttl = $ttl ? $ttl : PAGE_TTL;//缓存时间,默认3600s
     $contents = ob_get_contents();//从缓存中获取内容
     $contents = "n".$contents;
       //加上自定义头部:过期时间=生成时间+缓存时间
     file_put_contents(PAGE_FILE, $contents);//写入缓存文件中
     ob_end_flush();//释放缓存
}


3.函数使用,注意这两个函数有先后执行顺序,还有别忘了ob_start(),代码如下:

复制代码 代码如下:

      page_init();//页面缓存初始化
      ob_start();//开启缓存        
  
      ...//代码段
  
      page_cache(60);//一般是最后一行
  
?>


例2,下面做个示例来说明PHP页面缓存技术,代码如下:

复制代码 代码如下:

$_time =10;
$dir="D:\php\";
 
function cache_start($_time, $dir)
{
  $cachefile = $dir.'http://www.jb51.net/'.sha1($_SERVER['REQUEST_URI']).'.html';
  $cachetime = $_time;
  ob_start();
  if(file_exists($cachefile) && (time()-filemtime($cachefile)   {
    include($cachefile);
    ob_end_flush();
    exit;
  }
}
 
function cache_end($dir)
{
  $cachefile = $dir.'http://www.jb51.net/'.sha1($_SERVER['REQUEST_URI']).'.html';
  $fp = fopen($cachefile, 'w');
  fwrite($fp, ob_get_contents());
  fclose($fp);
  ob_end_flush();
}
 
cache_start($_time, $dir);
//以下是输出的内容,,放在cache_start和cache_end两个方法之间
for ($i=0;$i {
  echo $i;
  sleep(1);
}
cache_end($dir);
?>


例,利用生成文件做缓存,代码如下:

复制代码 代码如下:

ob_start();
/**
* @author 何名慧
* @copyright 2009-3-13
* @param string $cache_folder 缓文件夹
* @param int $cache_create_time 文件缓存时间
* @example $cache=new Esj_Cache('./_cache',100)
* @example $cache->read_cache() 读取缓存并输出
* @example $cache->creatre_cache() 创建缓存文件(放在文件未尾)
* @example $cache->list_file() 返回所有缓存文件列表
* @example $cache->del_file() 删除所有缓存文件
*/
 
class Esj_Cache{
private $cache_folder=null;//cacher文件夹
private $wroot_dir=null;//站点目录
private $cacher_create_time=null;//cacher文件的建立时间
 
public function __construct($cache_foldername,$cacher_time=100)
{
ob_start();
$this->wroot_dir=$_SERVER['DOCUMENT_ROOT'];
$this->cache_folder=$cache_foldername;
$this->cacher_create_time=$cacher_time;
}
 
public function read_cache()
{
try {
if(self::create_folder($this->cache_folder))
{
self::get_cache();//输出缓存文件信息
}else
{
echo "缓存文件夹创建失败!";
return false;
}
 
}catch(Exception $e){
echo $e;
return false;
}
}
 
//测试缓存文件夹是否存在
private function exist_folder($foler)
{
if(file_exists($this->wroot_dir."http://www.jb51.net/".$foler)){
return true;
}else {
return false;
}
}
 
//建立一个新的文件夹
private function create_folder($foler)
{
if(!self::exist_folder($foler))
{
try{
mkdir($this->wroot_dir."http://www.jb51.net/".$foler,0777);
chmod($this->wroot_dir."http://www.jb51.net/".$foler,0777);
return true;
}catch (Exception $e)
{
self::get_cache();//输出缓存
return false;
}
return false;
}
else
{
return true;
}
}
 
//读取缓存文件
private function get_cache()
{
$file_name=self::get_filename();
if (file_exists($file_name)&&((filemtime($file_name)+$this->cacher_create_time) > time()))
{
$content=file_get_contents($file_name);
if($content)
{
echo $content;
ob_end_flush();
exit;
}else
{
echo "文件读取失败";
exit;
 
}
 
}
}
 
//返回文件的名字
private function get_filename()
{
$filename=$file_name=$this->wroot_dir.'http://www.jb51.net/'.$this->cache_folder.'http://www.jb51.net/'.md5($_SERVER['QUERY_STRING']).".html";
return $filename;
}
 
//建立缓存文件
public function create_cache()
{
$filename=self::get_filename();
if($filename!="")
{
try{
file_put_contents($filename,ob_get_contents());
return true;
}catch (Exception $e)
{
echo "写缓存失败:".$e;
exit();
}
return true;
}
}
 
// 取得缓存中的所有文件
public function list_file()
{
$path=$this->cache_folder;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if($file!="." && $file!="..") {
$path1=$path."http://www.jb51.net/".$file;
if(file_exists($path1))
{
$result[]=$file;
}
}
}
closedir($handle);
}
return $result;
}
 
//删除缓存中的所有文件
public function del_file()
{
$path=$this->cache_folder;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if($file!="." && $file!="..") {
$path1=$path."http://www.jb51.net/".$file;
if(file_exists($path1))
{
unlink($path1);
}
}
}
closedir($handle);
}
return true;
}
 
}
 
?>

希望本文所述对大家的php程序设计有所帮助。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

CakePHP arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles