ホームページ  >  記事  >  バックエンド開発  >  PHPにおけるキャッシュ技術の応用を詳しく解説、PHPキャッシュ技術の解説_PHPチュートリアル

PHPにおけるキャッシュ技術の応用を詳しく解説、PHPキャッシュ技術の解説_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:59:48864ブラウズ

PHPにおけるキャッシュ技術の応用を詳しく説明し、phpキャッシュ技術を説明します

PHPは、近年登場したWebデザインスクリプト言語であり、そのパワーと拡張性により、近年大きな進歩を遂げています。従来の ASP Web サイトでは、MSSQL から PHP に 60,000 個のデータを転送する場合に 40 秒かかりますが、Web サイトではそれ以上の時間がかかります。データを呼び出すために、ファイルや特定のメモリ アドレスなどの他の場所からデータを呼び出す必要はありません。キャッシュ技術、つまりキャッシュ技術です

一般的に言えば、キャッシュの目的は、アクセスを高速化するためにデータを 1 か所に置くことです。メモリが最速であることは間違いありませんが、これはもちろん非現実的です。たとえば、ob_start() キャッシュ ページがオンになっている場合、ページ出力が自動的にクリアされるか待機するまで、ページ コンテンツはファイル ヘッダーを送信する前にメモリにキャッシュされます。 ob_get_contents の戻り値、[または ob_end_clean Clearance によって表示されます。これは静的ページの生成によく使用でき、テンプレートによく反映できます。これについては、私のこの記事で詳しく説明しています。

PHP による静的ページの生成について言えば、これは 1 つの方法ですが、一時的なものであり、問​​題を解決する良い方法ではありません。

さらに、ASP にはパブリックパラメータを保存できるオブジェクトアプリケーションがありますが、これも少しキャッシュですが、開発者がそのようなオブジェクトを生成するのを今のところ見たことがありません。 NET ページ キャッシュ このテクノロジはビューステートを使用し、キャッシュはファイルの関連付けです (必ずしも正確であるとは限りません)。ファイルが変更されずにタイムアウトしない場合 (注 1)、キャッシュが読み取られます。結果が返されます。これがこのソースコードを見てください。

classcache{
/*
ClassName:cache
Description:controltocachedata,$cache_out_timeisaarraytosavecachedatetimeout.
Version:1.0
作者:old farmer cjjer
Lastmodify:2006-2-26
AuthorURL:http://www. c jjer .com
*/
private$cache_dir;
private$expireTime=180;//キャッシュ時間は60秒です
function__construct($cache_dirname){
if(!@is_dir($cache_dirname)){
if(! @mkdir ($cache_dirname,0777)){
$this->warn(''キャッシュ ファイルが存在しないため作成できません。手動で作成する必要があります。'');
returnfalse;
}
}
$this->cache_dir=$cache_dirname;
}
function__destruct(){
echo''Cacheclassbye.'';
}
functionget_url(){
if(!isset($_SERVER[''REQUEST_URI''])) {
$url=$_SERVER[ ''REQUEST_URI''];
}else{
$url=$_SERVER[''SCRIPT_NAME''];
$url.=(!empty($_SERVER[''QUERY_STRING'' ]))?''?' '.$_SERVER[''QUERY_STRING'']:'''';
}
return$url;
}
functionwarn($errorstring){
echo"< fontcolor=''red''> ;エラーが発生しました:
".$errorstring."
";
}
functioncache_page($pageurl,$pagedata) ){
if(!$fso= fopen($pageurl,''w'')){
$this->warns(''キャッシュされたファイルを開けません。'');//trigger_error
returnfalse;
}
if(!flock($fso,LOCK_EX )){//LOCK_NB、排他ロック
$this->warns(''キャッシュ ファイルをロックできません。'');//trigger_error
returnfalse;
}
if( !fwrite($fso,$pagedata) ){//バイト ストリームを書き込み、シリアル化して他の形式を書き込みます
$this->warns(''キャッシュ ファイルを書き込めません。'');//trigger_error
returnfalse;
}
flock($fso,LOCK_UN );//ロックを解放します
fclose($fso);
returntrue;
}
functiondisplay_cache($cacheFile){
if(!file_exists($cacheFile)){
$this-> warn(''キャッシュ ファイルを読み取ることができません。'');//trigger_error
returnfalse;
}
echo''キャッシュ ファイルを読み取ります:''.$cacheFile;
//returnunserialize(file_get_contents($cacheFile));
$ fso=fopen($cacheFile, ''r'');
$data=fread($fso,filesize($cacheFile));
fclose($fso);
return$data;
}
functionreadData($cacheFile= ''default_cache.txt'' ){
$cacheFile=$this->cache_dir."/".$cacheFile;
if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this- >expireTime)){
$data=$this->display_cache($cacheFile);
}else{
$data="fromherewocangetitfrommysqldatabase,updatetimeis".date(''ldSofFYh:i:sA'') ." 、有効期限は次のとおりです: ".date(''ldSofFYh:i:sA'',time()+$this->expireTime)。"---------- ";
$this->cache_page($cacheFile,$data);
}
return$data;
}
}

?>

このコードを中断して 1 行ずつ説明します。

3: プログラム透析

このキャッシュ クラス (このクラスでは何も恐れることはありません。読み続けてください) は、cache という名前が付けられ、2 つの属性があります:

private$cache_dir;

$cache_dir は、キャッシュされたファイルが配置される Web サイトのディレクトリに対する相対的な親ディレクトリです。$expireTime (注 1) は、主に次の考えに基づいて、キャッシュされたデータの有効期限です。

データまたはファイルがロードされると、最初にキャッシュファイルが存在するかどうかを判断し、ファイルの最終変更時刻とキャッシュ時刻の合計が現在時刻より大きいかどうかを判断します。有効期限が切れていない場合は false を返します。 false が返された場合は、元のデータを読み取り、キャッシュ ファイルに書き込んでデータを返します。,

次にプログラムを見てください:

private$expireTime=180;
function__construct($cache_dirname){
if(!@is_dir($cache_dirname)){
if(!@mkdir($cache_dirname,0777)){
$this->warn(''キャッシュ ファイルが存在しないため、作成できません。手動で作成する必要があります。'');
returnfalse;
}
}
$this->cache_dir=$cache_dirname;
}
初めてクラスをインスタンス化するとき、ファイル名をキャッシュするためのパラメーターを含むデフォルト関数を構築します。ファイルが存在しない場合は、編集権限を持つフォルダーを作成し、作成が失敗した場合に例外をスローします。キャッシュ クラスの属性 このフォルダー名の場合、すべてのキャッシュ ファイルはこのフォルダーの下にあります。

function__destruct(){
echo''キャッシュクラスバイ。'';
}
これはクラス class のデストラクターです。デモンストレーションのために、キャッシュ クラス リソースが正常に解放されたことを示す文字列を出力します。

functionwarn($errorstring){
echo"エラーが発生しました:
".$errorstring."
< ; /b>";

}

このメソッドはエラー情報を出力します。

functionget_url(){if(!isset($_SERVER[''REQUEST_URI''])){このメソッドは、現在の URL の情報を返します。これは、主に x.php?page=1、x.php?page=2 などのファイルをキャッシュするものです。このキャッシュクラスの機能を拡張するものです
$url=$_SERVER[''REQUEST_URI''];
}else{
$url=$_SERVER['' SCRIPT_NAME''];
$url.=(!empty($_SERVER[''QUERY_STRING'']))?''?''.$_SERVER[''QUERY_STRING'']:'''';
}
return$url;
}

functioncache_page($pageurl,$pagedata){if(!$fso=fopen($pageurl,''w'')){cache_page メソッドは、キャッシュされたファイル名とデータをそれぞれ渡します。これは、最初に fopen を使用してファイルを開き、次にハンドルを呼び出してファイルをロックし、次に fwrite を使用してファイルを書き込みます。最後にハンドルを放すと、次のコメントが表示される場合があります
$this->warns(''キャッシュ ファイルを開けません。'');/ /trigger_error
returnfalse;
}
if(!flock($fso,LOCK_EX)){//LOCK_NB、排他ロック
$this->warns(''キャッシュ ファイルをロックできません。'');//trigger_error
returnfalse;
}
if(!fwrite($fso,$pagedata)){//バイトストリームを書き込み、シリアル化して他の形式を書き込みます
$this->warns(''キャッシュ ファイルを書き込めません。'' );// trigger_error
returnfalse;
}
flock($fso,LOCK_UN);//ロックを解除
fclose($fso);
returntrue;
}

バイトストリームに書き込み、シリアル化して他の形式に書き込む

ちなみに、配列を書き込みたい場合 (MySQL データベースから結果を選択できます)、serialize 関数を使用して書き込み、unserialize を使用して元の型を読み取ります。

functiondisplay_cache($cacheFile){if(!file_exists($cacheFile)){$this->warn(''キャッシュ ファイルを読み取れません。'');//trigger_errorこれは、ファイル名でキャッシュを読み取る方法です。ファイルが存在しない場合、または読み取れない場合は、もちろん、非人道的な場合は、ファイルを再生成することができます。キャッシュ
returnfalse;
}
echo''キャッシュ ファイルを読み取ります: ''.$cacheFile;
//returnunserialize(file_get_contents($cacheFile));
$fso=fopen($cacheFile,''r'');
$data=fread($fso,filesize( $cacheFile));
fclose($fso);
return$data;
}


functionreadData($cacheFile=''default_cache.txt''){$cacheFile=$this->cache_dir."/".$cacheFile;if(file_exists($cacheFile)&&filemtime($cacheFile)>(時間) ()-$this->expireTime)){


この関数は、私たちが呼び出すメソッドです。これは、ファイルが存在するかどうか、およびファイルの最終変更時刻 + 有効期限が現在の時刻を超えているかどうかを判断するためのインターフェイス メソッドとして記述できます。現在の時刻よりも有効期限が切れていないことを意味します)。ファイルが期限切れになっていない場合、または期限切れになっている場合は、元のデータを再ロードします。ここでは、簡単にするために、キャッシュを継承できます。データベースからデータを取得するには、特定のクラスからクラスを呼び出します(注2)

その4:追加説明と結論

注 1: キャッシュ時間は、時間の状況に応じて自分で調整できます。キャッシュ時間 (つまり、キャッシュ キー) に注意してください。コントロールもキャッシュされます。これは CMS システムで広く使用されており、更新されるキーが戦闘全体を制御するのに非常に簡単です。

注 2: PHP5 はクラス継承のサポートを開始します。これは興味深いことです。構成されたクラスで Web サイトの残りの部分をグローバルに記述し、データ層と対話するクラス (MySQL と対話するクラスなど) を記述します。クラスはデータ対話クラスを継承しており、データベースを非常に簡単に読み取ることができます。これは外国語なので、ここでは詳しく説明しません。時間があるときに説明します。

特記事項、このクラスファイルはphp5以降のバージョン用です。他のバージョンではクラスを使用しないでください。

転載元: http://www.aspnetjia.com

http://www.bkjia.com/PHPjc/1097276.html

tru​​ehttp://www.bkjia.com/PHPjc/1097276.html技術記事 PHP におけるキャッシュ技術の応用について詳しく説明し、PHP キャッシュ技術について説明します。PHP は、そのパワーと拡張性により、近年急速な発展を遂げた Web デザイン スクリプト言語です。
$data=$this->display_cache($cacheFile);
}else{
$data="fromherewocangetitfrommysqldatabase,updatetimeis".date(''ldSofFYh: i:sA'')."、有効期限は次のとおりです: ".date(''ldSofFYh:i:sA'',time()+$this->expireTime)."---- - -----";
$this->cache_page($cacheFile,$data);
}
return$data;
}


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。