PHP は、近年登場した Web デザイン スクリプト言語であり、そのパワーと拡張性により、mssql を変換する場合、従来の ASP Web サイトと比較して、速度の点で大幅に進歩しています。たとえば、PHP では 60,000 個のデータを処理するのに 40 秒かかりますが、ASP では 2 分もかかりません。しかし、Web サイトのデータが増えるにつれて、データを削除する必要がなくなりました。ファイルや特定のメモリアドレスなど、データベースから毎回取得できます。これが PHP のキャッシュ技術、つまりキャッシュ技術です。
詳細な分析
一般的に、キャッシュの目的は、アクセスを高速化するためにデータを 1 か所に置くことです。メモリが最も高速であることは間違いありませんが、数百 M のデータをメモリに保存できるでしょうか? もちろん、これは非現実的な場合もあります。たとえば、ob_start() キャッシュ ページがオンになっている場合、ページのコンテンツは、ページ出力が自動的にクリアされるまで、または返されるまで、ファイル ヘッダーを送信する前にメモリにキャッシュされます。これは、静的ページの生成にうまく利用でき、テンプレートにうまく反映できます。
さらに、ASP にはパブリック パラメータを保存できるオブジェクト アプリケーションがあり、これもキャッシュとみなされますが、開発者がそのようなオブジェクトを作成するのはこれまで見たことがありません。実際、それは必要ありません。キャッシュ技術 ビューステートを使用しており、キャッシュはファイルの関連付けです (必ずしも正確であるとは限りません)。ファイルが変更されずにタイムアウトしない場合 (注 1)、キャッシュが読み取られます。これがアイデアです。このソースコードを見てください。
クラス キャッシュ{
/*
クラス名: キャッシュ
説明: データをキャッシュする制御、$cache_out_time はキャッシュの日付タイムアウトを保存する配列です。
バージョン: 1.0
作者: 老農夫 cjjer
最終更新日:2006-2-26
著者の URL: http://www.cjjer.com
*/
プライベート $cache_dir;
private $expireTime=180;//キャッシュ時間は60秒です
関数 __construct($cache_dirname){
if(!@is_dir($cache_dirname)){
if(!@mkdir($cache_dirname,0777)){
$this->warn('キャッシュ ファイルが存在しないため作成できません。手動で作成する必要があります。');
return false;
}
}
$this->cache_dir = $cache_dirname;
}
関数 __destruct(){
echo 'キャッシュクラスバイバイ。';
}
関数 get_url() {
if (!isset($_SERVER['REQUEST_URI'])) {
$url = $_SERVER['REQUEST_URI'];
}else{
$url = $_SERVER['SCRIPT_NAME'];
$url .= (!empty($_SERVER['QUERY_STRING'])) '?'
}$url を返す;
}
----------------------------------
関数 warn($errorstring){
echo "エラーが発生しました:
".$errorstring."
";
関数cache_page($pageurl,$pagedata){
if(!$fso=fopen($pageurl,'w')){
$this->warns('キャッシュ ファイルを開けません。');//trigger_error
return false;
}
if(!flock($fso,LOCK_EX)){//LOCK_NB、排他的ロック
$this->warns('キャッシュ ファイルをロックできません。');//trigger_error
return false;
}
if(!fwrite($fso,$pagedata)){//バイトストリームを書き込み、シリアル化して他の形式を書き込みます
$this->warns('キャッシュ ファイルを書き込めません。');//trigger_error
return false;
}
flock($fso,LOCK_UN);//ロックを解放します
fclose($fso);
true を返します;
}
関数 display_cache($cacheFile){
if(!file_exists($cacheFile)){
$this->warn('キャッシュファイルを読み取れません。');//trigger_error
return false;
}
echo 'キャッシュ ファイルの読み取り:'.$cacheFile;
//return unserialize(file_get_contents($cacheFile));
$fso = fopen($cacheFile, 'r');
$data = fread($fso, filesize($cacheFile));
fclose($fso);
$data を返す;
}
関数 readData($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="ここからは mysql データベースから取得できます、更新時刻は ".date('l dS of F Y h:i:s A')."、有効期限は:".date('l dS of F Y h:i:s A',time()+$this->expireTime)."----------";
$this->cache_page($cacheFile,$data);
}
$data を返す;
}
}
?>
ここで、このコードを中断して 1 行ずつ説明します
人工透析
このキャッシュ クラス (このクラスでは何も恐れることはありません。読み続けてください) の名前は cache で、次の 2 つの属性があります:
プライベート $cache_dir;
プライベート $expireTime=180;
$cache_dir は、キャッシュされたファイルが配置される Web サイトのディレクトリを基準とした親ディレクトリです。$expireTime (注 1) は、主に次の考えに基づいて、キャッシュされたデータの有効期限です:
データまたはファイルがロードされると、最初にキャッシュ ファイルが存在するかどうかが判断され、ファイルの最終変更時刻とキャッシュ時刻の合計が現在時刻より大きいかどうかが判断されます。有効期限が切れていない場合は false を返します。 false の場合は、元のデータを読み取り、キャッシュ ファイルに書き込み、データを返します。次にプログラムを見てみましょう:
関数 __construct($cache_dirname){
if(!@is_dir($cache_dirname)){
if(!@mkdir($cache_dirname,0777)){
$this->warn('キャッシュ ファイルが存在しないため作成できません。手動で作成する必要があります。');
return false;
}
}
$this->cache_dir = $cache_dirname;
}
クラスが初めてインスタンス化されるとき、ファイル名をキャッシュするためのパラメーターを使用してデフォルト関数が構築され、ファイルが存在しない場合は編集権限を持つフォルダーが作成され、作成が失敗した場合に例外がスローされます。キャッシュ クラスの属性をこのフォルダー名に設定します。すべてのキャッシュ ファイルはこのフォルダーの下にあります。
function __destruct(){ echo 'キャッシュクラスバイ。' }
これは、クラス クラスのデストラクターです。デモンストレーションのために、キャッシュ クラス リソースが正常に解放されたことを示す文字列を出力します。
echo "エラーが発生しました:".$errorstring."
";
}
このメソッドはエラー メッセージを出力します:
関数 get_url() {
if (!isset($_SERVER['REQUEST_URI'])) {
$url = $_SERVER['REQUEST_URI'];
}else{
$url = $_SERVER['SCRIPT_NAME'];
$url .= (!empty($_SERVER['QUERY_STRING'])) '?'
}
$url を返す;
}
このメソッドは、現在の URL の情報を返します。これは、主に x.PHP?page=1、x.PHP?page=2 などのファイルをキャッシュする海外の多くの人が行っている方法です。このキャッシュ クラスの機能を拡張するためにここにリストします。
関数cache_page($pageurl,$pagedata){
if(!$fso=fopen($pageurl,'w')){
$this->warns('キャッシュ ファイルを開けません。');//trigger_error
false を返します
}
if(!flock($fso,LOCK_EX)){//LOCK_NB、排他的ロック
$this->warns('キャッシュ ファイルをロックできません。');//trigger_error
false を返します
}
if(!fwrite($fso,$pagedata)){//バイト ストリームを書き込み、シリアル化して他の形式を書き込みます
$this->warns('キャッシュ ファイルに書き込めません。');//trigger_error
false を返します
}
flock($fso,LOCK_UN);//ロックを解除します
fclose($fso);
true を返します。
cache_page メソッドは、キャッシュされたファイル名とデータをそれぞれ渡します。これは、最初に fopen を使用してファイルを開き、次にハンドルを呼び出してファイルをロックし、次に fwrite を使用してファイルに書き込みます。最後にハンドルを放します。どのステップでもエラーが発生すると、次のコメントが表示される場合があります:
関数 display_cache($cacheFile){
if(!file_exists($cacheFile)){
$this->warn('キャッシュファイルを読み取れません。');//trigger_error
return false;
}
echo 'キャッシュ ファイルの読み取り:'.$cacheFile;
//return unserialize(file_get_contents($cacheFile));
$fso = fopen($cacheFile, 'r');
$data = fread($fso, filesize($cacheFile));
fclose($fso);
$data を返す;
}
ファイル名でキャッシュを読み込む方法です。ファイルが存在しない場合や読み込めない場合は、もちろん false を返します。 🎜>
関数 readData($cacheFile='default_cache.txt'){
$cacheFile = $this->cache_dir."/".$cacheFile
if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this->expireTime)){
$data=$this->display_cache($cacheFile);
}その他{
$data="ここからは mysql データベースから取得できます。更新時刻は ".date('l dS of F Y h:i:s A')."、有効期限は: ".date('l dS of F Y h:i:s A',time()+$this->expireTime)."----------";
$this->cache_page($cacheFile,$data);
}
$data を返します
補足説明 まとめ
注 1: キャッシュ時間は、時間の状況に応じて自分で調整できます。キャッシュ時間 (つまり、キャッシュ キー) は、自分の都合に合わせて変更してください。これは CMS システムで広く使用されており、更新されるキーが戦闘全体を制御するのに非常に簡単です。
注 2: PHP5 はクラス継承のサポートを開始します。これは興味深いことです。構成されたクラスで Web サイトの残りのグローバル部分を記述し、次にデータ層と対話するクラス (MySQL と対話するクラスなど)、つまりキャッシュ クラスを記述します。データ対話クラスはデータベースを簡単に読み取ることができます。これについては、時間があるときに詳しく説明しません。