目次
PHPページのキャッシュ方法のまとめ
ホームページ バックエンド開発 PHPチュートリアル PHP ページのキャッシュ方法の概要_PHP チュートリアル

PHP ページのキャッシュ方法の概要_PHP チュートリアル

Jul 13, 2016 am 10:09 AM
php start 主要 関数 存在する 方法 はい シリーズ キャッシュ ページ

PHPページのキャッシュ方法のまとめ

PHPのページキャッシュでは、ob_start()、ob_end_flush()、ob_get_contents()などのob系の関数が主に使用されますが、より高度なキャッシュではこれらの関数は使用されません。この記事の最後に例を挙げて説明します。

まず、キャッシュに一般的に使用される ob シリーズ関数を見てみましょう:

ob_start(): この関数のコンテンツは、ob_end_flush() または ob_end_clean() までページ キャッシュに保存されます。

ob_g​​et_contents(): ページ キャッシュ内のコンテンツを取得するために使用されます。取得後、フィールドのフィルター処理、コンテンツの一致など、コンテンツを自由に処理できます。~~~

ob_end_flush(): ページ キャッシュの終了を示します。私が確認したように、キャッシュされたコンテンツは現在のページに出力されます。これは、キャッシュされたコンテンツを表示できることを意味します。

これらの 3 つの PHP 関数を使用して、強力な機能を実現します。データベースのクエリ量が多い場合は、キャッシュを使用してこの問題を解決できます。

以下はエンコード部分です。

1. 初期化関数は通常、ページのキャッシュ パス、キャッシュ ファイルの命名形式などを設定します。ここで使用される識別 ID は、暗号化された $_SERVER[REQUEST_URI] パラメーターです。この関数では、キャッシュ期間が経過していない場合はキャッシュファイルをロードし、そうでない場合はソースファイルをロードします。コードは次のとおりです。

コードは次のとおりです:

関数 page_init()

{

$url = $_SERVER['REQUEST_URI'];//サブ URL、このパラメータは通常一意です

$ページID = md5($url); $dir = str_replace('/','_',substr($_SERVER['SCRIPT_NAME'],1,-4)); //ディレクトリの命名方法 (exp_index など)
If(!file_exists($pd = PAGE_PATH.$dir.'/'))@mkdir($pd,0777) または 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); 終了(0); }
true を返します。 }


2. ここではページ キャッシュ関数が使用されており、ヘッダー情報 (有効期限) をキャッシュ ファイルの内容に追加します。そのため、毎回ヘッダー内の有効期限を page_init() で比較するだけで済みます。関数を使用すると、キャッシュの有効期限が切れているかどうかを判断できます。コードは次のとおりです。
コードをコピーします。コードは次のとおりです:

関数 page_cache($ttl = 0)
{
$ttl = $ttl ? $ttl : PAGE_TTL;//キャッシュ時間、デフォルトは 3600 秒
$contents = ob_get_contents();// キャッシュからコンテンツを取得します
$contents = "<!--page_ttl:".(time() + $ttl)."-->n".$contents; //カスタムヘッダーを追加: 有効期限 = 生成時間 + キャッシュ時間
File_put_contents(PAGE_FILE, $contents);// キャッシュ ファイルに書き込みます

ob_end_flush();// キャッシュを解放します

}

3. 関数を使用するときは、これら 2 つの関数が順番に実行されることに注意してください。コードは次のとおりです:

コードは次のとおりです:

<?php
Page_init();// ページキャッシュの初期化
                                                                                                                                                                       
...//コードスニペット

Page_cache(60);//通常は最後の行

?>


例 2、PHP ページ キャッシュ テクノロジを説明する例を示します。コードは次のとおりです。

コードは次のとおりです:

<?php
$_time = 10; $dir="D:php";
関数cache_start($_time, $dir)
{
$cachefile = $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html'; $キャッシュタイム = $_時間
ob_start(); if(file_exists($cachefile) && (time()-filemtime($cachefile) < $cachetime))
{
インクルード($キャッシュファイル)
ob_end_flush(); 出る
}
}

関数cache_end($dir)
{
$cachefile = $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html'; $fp = fopen($cachefile, 'w'); fwrite($fp, ob_get_contents()); fclose($fp); ob_end_flush(); }

キャッシュ_開始($_time, $dir); // 以下は、cache_start メソッドとcache_end メソッドの間に配置される出力コンテンツです
($i=0;$i<5;$i++) の場合
{
$i をエコーし​​ます。 睡眠(1); }
キャッシュ_エンド($dir); ?>


たとえば、生成されたファイルをキャッシュに使用する場合、コードは次のようになります:

コードは次のとおりです:
<?php
ob_start(); /**
* @著者何明輝
* @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() はすべてのキャッシュ ファイルを削除します
*/

クラス Esj_Cache{
private $cache_folder=null;//キャッシュフォルダー
private $wroot_dir=null;//サイトディレクトリ
private $cacher_create_time=null;//キャッシャーファイルの作成時間

パブリック関数 __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
}

パブリック関数 read_cache()
{
{
を試してください if(self::create_folder($this->cache_folder))
{
self::get_cache();//キャッシュファイル情報を出力する
}その他
{
echo "キャッシュフォルダーの作成に失敗しました!"; false を返します。 }

}catch(例外 $e){
エコー $e
false を返します。 }
}

//キャッシュフォルダーが存在するかどうかをテストします
プライベート関数exist_folder($foler)
{
if(file_exists($this->wroot_dir."/".$foler)){
true を返します。 } その他 {
false を返します。 }
}

// 新しいフォルダーを作成します
プライベート関数 create_folder($foler)
{
if(!self::exist_folder($foler))
{
試してください{
mkdir($this->wroot_dir."/".$foler,0777); chmod($this->wroot_dir."/".$foler,0777); true を返します。 }catch (例外 $e)
{
self::get_cache();//出力キャッシュ
false を返します。 }
false を返します。 }
それ以外は
{
true を返します。 }
}

//キャッシュファイルを読み込む
プライベート関数 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)
{
$content をエコーし​​ます。 ob_end_flush(); 出る
}その他
{
echo "ファイルの読み取りに失敗しました"
出る

}

}
}

// ファイルの名前を返します
プライベート関数 get_filename()
{
$filename=$file_name=$this->wroot_dir.'/'.$this->cache_folder.'/'.md5($_SERVER['QUERY_STRING']).".html"; $ファイル名を返します
}

//キャッシュファイルを作成する
パブリック関数 create_cache()
{
$filename=self::get_filename(); if($ファイル名!="")
{
試してください{
file_put_contents($filename,ob_get_contents()); true を返します。 }catch (例外 $e)
{
echo "キャッシュの書き込みに失敗しました:" .$e; 終了(); }
true を返します。 }
}

// キャッシュ内のすべてのファイルを取得します
パブリック関数 list_file()
{
$path=$this->キャッシュフォルダー
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if($file!="." && $file!="..") {
$path1=$path."/".$ファイル
if(file_exists($path1))
{
$結果[]=$ファイル
}
}
}
クローズ済み($ハンドル)
}
$結果を返す
}

//キャッシュ内のすべてのファイルを削除します
パブリック関数 del_file()
{
$path=$this->キャッシュフォルダー
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if($file!="." && $file!="..") {
$path1=$path."/".$ファイル
if(file_exists($path1))
{
リンクを解除($path1); }
}
}
クローズ済み($ハンドル)
}
true を返します。 }

}

?>


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/941227.html技術記事 PHPページのキャッシュ方法のまとめ. PHPページのキャッシュでは主にob_start()、ob_end_flush()、ob_get_contents()などのobシリーズの関数を使用しますが、より高度なキャッシュではこれらの関数は使用しません...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

Huawei Mate 60シリーズ、新しいAI排除+イメージアップグレード、秋のプロモーションを楽しむのに最適な時期 Huawei Mate 60シリーズ、新しいAI排除+イメージアップグレード、秋のプロモーションを楽しむのに最適な時期 Aug 29, 2024 pm 03:33 PM

Huawei Mate 60シリーズ、新しいAI排除+イメージアップグレード、秋のプロモーションを楽しむのに最適な時期

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

See all articles