良いPHPキャッシュクラスの紹介とPHPキャッシュ関数の紹介と使用
7760 ワード
キャッシュは実際の使用に広く応用されており、サーバ・データベースへのアクセスを軽減し、実行速度を向上させることができます.現在、多くのCMSコンテンツ管理システムでは、キャッシュメカニズムが頻繁に使用され、システムの稼働効率が向上しています.以下はよく書かれたキャッシュクラスで、キャッシュのメカニズムと書き方を参考にすることができます.
cache.phpコードは次のとおりです.
クラスの使用:
PHPのキャッシュ関連関数の紹介
常に変わらない情報もありますが、キャッシュに変更して表示速度を速めることができます.これは価値があります.キャッシュとは、サーバ側に保存されている共通情報です.それはサーバーと生死で、私达はキャッシュを保存する时に次回の更新の时间の判断を指定することができて、例えば5分に一回更新して、前回の更新の时间を记录することができて、现在の时间と比较して、もし5分より大きいならば、データベースを読み取って、更新して交换して、さもなくば直接キャッシュのデータを読み取って、もちろん、キャッシュはクライアントのユーザーが活性化する必要があります一度だけ.
ob_start()関数
ob_start()関数:出力バッファを開きます.
関数フォーマットvoid ob_start(void)
説明:バッファがアクティブになっている場合、PHPプログラムからの非ファイルヘッダ情報はすべて送信されず、内部バッファに保存されます.バッファの内容を出力するにはob_を使用します.end_flush()またはflush()は、バッファの内容を出力します.
flush()関数
関数フォーマット:flush()
説明:この関数はよく使われていて、効率が高いです.
string ob_get_contents()関数
ob_get_contents:内部バッファの内容を返します.
関数フォーマット:string ob_get_contents(void)
説明:この関数は現在のバッファの内容を返し、出力バッファがアクティブでない場合はFALSEを返します.
ob_get_length()関数
ob_get_length:内部バッファの長さを返します.
関数フォーマット:int ob_get_length(void)
説明:この関数は現在のバッファの長さを返します.およびob_get_contents同様に、出力バッファがアクティブになっていない場合はFALSEに戻ります.
ob_end_clean()関数
ob_end_clean:内部バッファの内容を削除し、内部バッファを閉じます.
関数フォーマット:void ob_end_clean(void)
説明:この関数は内部バッファの内容を出力するのではなく、削除します.
ob_end_flush()関数
ob_end_flush:内部バッファの内容をブラウザに送信し、出力バッファを閉じます.
関数フォーマット:void ob_end_flush(void)
説明:この関数は出力バッファの内容を送信します(もしあれば).
ob_implicit_flush()関数
関数フォーマット:void ob_implicit_flush ([int flag])
説明:デフォルトではバッファを閉じ、絶対出力を開くと、各スクリプト出力がブラウザに直接送信され、flush()を呼び出す必要はありません.
PHPによる静的ページのキャッシュ技術の研究
MySQLデータベースの速度が遅い場合は、サイトのキャッシュを重視する必要があります.WordPressを使用したことのある友人は、WP Super Cacheというプラグインがあり、WordPressのページを最初に生成したときに静的なページに保存することができ、再びこのページを要求すると、データベースを読み込む時間が省けます.ここで議論しているのはこの技術です.
最初の問題はPHP出力の内容をどのように取得するかです.出力コンテンツを取得する理由は簡単です.出力されたコンテンツを保存することができ、訪問者が再び来たときに事前に保存したコンテンツを彼に与えることができます.
これらの目的を実現するのも簡単です.関数ob_をstart()は、コンテンツ出力の前に呼び出され、すべてのコンテンツ出力が完了した後にob_が呼び出されるget_contents()出力の内容を取得し、その後ob_を呼び出すend_flush()は終了を表すので、簡単な例は以下の通りです.
プログラムの実行結果:
$cache変数は、以前の出力結果を保存していることがわかります.すなわち,cacheによりPHPの結果出力を低減できる.
管理者はキャッシュを有効にせず、観光客はキャッシュを有効にする習慣がある場合があります.この時、実は実現するのも簡単です.2つの関数cache($id)とend_を自分で書くことができます.Cache($id)は、キャッシュの開始とキャッシュの終了をそれぞれ表し、コードは以下の通りです(ここでは3つの関数が省略されています).
サイトは、必要に応じて、モバイルデバイス向けに設計されたページを作成する場合があります.では、この場合は$idを拡張する必要があります.この拡張には、別のパラメータを追加する、モバイルデバイスのページをデスクトップデバイスとは異なるフォルダに存在させ、これらのページは同じ$idを使用するなど、多くの方法がある.もう一つの方法は、元の$idとモバイルデバイスのUser-agentを混ぜ合わせ、md 5()をすぐにすればいいということです.私は前のやり方に偏っている.もちろん他にも似たような方法があるに違いないが、要するにキャッシュのタグ($id)を異なるものに設定し、ユーザーが帰ってきたら区別すればいいという考えが中心だ.
また、1つのサイトには複数のユーザーロールがあり、対応するユーザーに対応するキャッシュを与える可能性があります.もちろん、上記の原則に従うだけです.
ob_start()とob_end_flush()は再帰的に処理されます.すなわち、ob_を呼び出すことができるend_flush()の前に、ob_を何回か呼び出します.start() . 例:
サイトは、必要に応じて、モバイルデバイス向けに設計されたページを作成する場合があります.では、この場合は$idを拡張する必要があります.この拡張には、別のパラメータを追加する、モバイルデバイスのページをデスクトップデバイスとは異なるフォルダに存在させ、これらのページは同じ$idを使用するなど、多くの方法がある.もう一つの方法は、元の$idとモバイルデバイスのUser-agentを混ぜ合わせ、md 5()をすぐにすればいいということです.私は前のやり方に偏っている.もちろん他にも似たような方法があるに違いないが、要するにキャッシュのタグ($id)を異なるものに設定し、ユーザーが帰ってきたら区別すればいいという考えが中心だ.
また、1つのサイトには複数のユーザーロールがあり、対応するユーザーに対応するキャッシュを与える可能性があります.もちろん、上記の原則に従うだけです.
ob_start()とob_end_flush()は再帰的に処理されます.すなわち、ob_を呼び出すことができるend_flush()の前に、ob_を何回か呼び出します.start() . 例:
プログラムの実行結果:
cache.phpコードは次のとおりです.
/*
:
_CachePath_
_CacheEnable_ , ,
_ReCacheTime_ , , ,
*/
class cache
{
var $cachefile;
var $cachefilevar;
function cache()
{
// Cache $this->cachefilevar $this->cachefile
// Cache , Cache ,
$s=array(".","/");$r=array("_","");
$this->cachefilevar=str_replace($s,$r,$_SERVER["SCRIPT_NAME"])."_".$_GET[_ActionVar_];
$this->cachefile=$this->cachefilevar.".".md5($_SERVER["REQUEST_URI"]);
}
// /
function delete()
{
//
$d = dir(_CachePath_);
$strlen=strlen($this->cachefilevar);
// Cache
while (false !== ($entry = $d->read()))
{
if (substr($entry,0,$strlen)==$this->cachefilevar)
{
if (!unlink(_CachePath_."/".$entry)) {echo "Cache ";exit;}
}
}
}
// Cache , Cache
function check()
{
// _ReCacheTime_
if (_ReCacheTime_+0>0)
{
// Cache
$var=@file(_CachePath_."/".$this->cachefilevar);$var=$var[0];
// Cache
if (time()-$var>_ReCacheTime_)
{
$this->delete();$ischage=true;
}
}
// Cache
$file=_CachePath_."/".$this->cachefile;
// Cache Cache
return (file_exists($file) and _CacheEnable_ and !$ischange);
}
// Cache
function read()
{
// Cache
$file=_CachePath_."/".$this->cachefile;
// Cache
if (_CacheEnable_) return readfile($file);
else return false;
}
// Cache
function write($output)
{
// Cache
$file=_CachePath_."/".$this->cachefile;
// Cache
if (_CacheEnable_)
{
// Cache
$fp=@fopen($file,'w');
if (!@fputs($fp,$output)) {echo " Cache ";exit;}
@fclose($fp);
// _ReCacheTime_
if (_ReCacheTime_+0>0)
{
// Cache
$file=_CachePath_."/".$this->cachefilevar;
$fp=@fopen($file,'w');
if (!@fwrite($fp,time())) {echo "Cache ";exit;}
@fclose($fp);
}
}
}
}
?>
クラスの使用:
check())
{
$template=$cache->read();
}
else
{
ob_start();
ob_implicit_flush(0);
?>
。。。。
write($template);
}
?>
PHPのキャッシュ関連関数の紹介
常に変わらない情報もありますが、キャッシュに変更して表示速度を速めることができます.これは価値があります.キャッシュとは、サーバ側に保存されている共通情報です.それはサーバーと生死で、私达はキャッシュを保存する时に次回の更新の时间の判断を指定することができて、例えば5分に一回更新して、前回の更新の时间を记录することができて、现在の时间と比较して、もし5分より大きいならば、データベースを読み取って、更新して交换して、さもなくば直接キャッシュのデータを読み取って、もちろん、キャッシュはクライアントのユーザーが活性化する必要があります一度だけ.
ob_start()関数
ob_start()関数:出力バッファを開きます.
関数フォーマットvoid ob_start(void)
説明:バッファがアクティブになっている場合、PHPプログラムからの非ファイルヘッダ情報はすべて送信されず、内部バッファに保存されます.バッファの内容を出力するにはob_を使用します.end_flush()またはflush()は、バッファの内容を出力します.
flush()関数
関数フォーマット:flush()
説明:この関数はよく使われていて、効率が高いです.
string ob_get_contents()関数
ob_get_contents:内部バッファの内容を返します.
関数フォーマット:string ob_get_contents(void)
説明:この関数は現在のバッファの内容を返し、出力バッファがアクティブでない場合はFALSEを返します.
ob_get_length()関数
ob_get_length:内部バッファの長さを返します.
関数フォーマット:int ob_get_length(void)
説明:この関数は現在のバッファの長さを返します.およびob_get_contents同様に、出力バッファがアクティブになっていない場合はFALSEに戻ります.
ob_end_clean()関数
ob_end_clean:内部バッファの内容を削除し、内部バッファを閉じます.
関数フォーマット:void ob_end_clean(void)
説明:この関数は内部バッファの内容を出力するのではなく、削除します.
ob_end_flush()関数
ob_end_flush:内部バッファの内容をブラウザに送信し、出力バッファを閉じます.
関数フォーマット:void ob_end_flush(void)
説明:この関数は出力バッファの内容を送信します(もしあれば).
ob_implicit_flush()関数
関数フォーマット:void ob_implicit_flush ([int flag])
説明:デフォルトではバッファを閉じ、絶対出力を開くと、各スクリプト出力がブラウザに直接送信され、flush()を呼び出す必要はありません.
PHPによる静的ページのキャッシュ技術の研究
MySQLデータベースの速度が遅い場合は、サイトのキャッシュを重視する必要があります.WordPressを使用したことのある友人は、WP Super Cacheというプラグインがあり、WordPressのページを最初に生成したときに静的なページに保存することができ、再びこのページを要求すると、データベースを読み込む時間が省けます.ここで議論しているのはこの技術です.
最初の問題はPHP出力の内容をどのように取得するかです.出力コンテンツを取得する理由は簡単です.出力されたコンテンツを保存することができ、訪問者が再び来たときに事前に保存したコンテンツを彼に与えることができます.
これらの目的を実現するのも簡単です.関数ob_をstart()は、コンテンツ出力の前に呼び出され、すべてのコンテンツ出力が完了した後にob_が呼び出されるget_contents()出力の内容を取得し、その後ob_を呼び出すend_flush()は終了を表すので、簡単な例は以下の通りです.
PHP 。
。' ?>
プログラムの実行結果:
PHP 。
。
PHP 。
。
$cache変数は、以前の出力結果を保存していることがわかります.すなわち,cacheによりPHPの結果出力を低減できる.
管理者はキャッシュを有効にせず、観光客はキャッシュを有効にする習慣がある場合があります.この時、実は実現するのも簡単です.2つの関数cache($id)とend_を自分で書くことができます.Cache($id)は、キャッシュの開始とキャッシュの終了をそれぞれ表し、コードは以下の通りです(ここでは3つの関数が省略されています).
サイトは、必要に応じて、モバイルデバイス向けに設計されたページを作成する場合があります.では、この場合は$idを拡張する必要があります.この拡張には、別のパラメータを追加する、モバイルデバイスのページをデスクトップデバイスとは異なるフォルダに存在させ、これらのページは同じ$idを使用するなど、多くの方法がある.もう一つの方法は、元の$idとモバイルデバイスのUser-agentを混ぜ合わせ、md 5()をすぐにすればいいということです.私は前のやり方に偏っている.もちろん他にも似たような方法があるに違いないが、要するにキャッシュのタグ($id)を異なるものに設定し、ユーザーが帰ってきたら区別すればいいという考えが中心だ.
また、1つのサイトには複数のユーザーロールがあり、対応するユーザーに対応するキャッシュを与える可能性があります.もちろん、上記の原則に従うだけです.
ob_start()とob_end_flush()は再帰的に処理されます.すなわち、ob_を呼び出すことができるend_flush()の前に、ob_を何回か呼び出します.start() . 例:
サイトは、必要に応じて、モバイルデバイス向けに設計されたページを作成する場合があります.では、この場合は$idを拡張する必要があります.この拡張には、別のパラメータを追加する、モバイルデバイスのページをデスクトップデバイスとは異なるフォルダに存在させ、これらのページは同じ$idを使用するなど、多くの方法がある.もう一つの方法は、元の$idとモバイルデバイスのUser-agentを混ぜ合わせ、md 5()をすぐにすればいいということです.私は前のやり方に偏っている.もちろん他にも似たような方法があるに違いないが、要するにキャッシュのタグ($id)を異なるものに設定し、ユーザーが帰ってきたら区別すればいいという考えが中心だ.
また、1つのサイトには複数のユーザーロールがあり、対応するユーザーに対応するキャッシュを与える可能性があります.もちろん、上記の原則に従うだけです.
ob_start()とob_end_flush()は再帰的に処理されます.すなわち、ob_を呼び出すことができるend_flush()の前に、ob_を何回か呼び出します.start() . 例:
';
ob_start();
echo 'content2'.'
';
$output1 = ob_get_contents();
echo $output1.'
';
ob_end_flush();
$output2 = ob_get_contents();
echo $output2.'
';
ob_end_flush();
?>
プログラムの実行結果:
content1
content2
content2
content1
content2
content2