2009-10-10 12 views
11

どのように私は、ページが更新されていない場合、ビューアはキャッシュされたコピーを取得する必要がありますので、PHPでWebページをキャッシュするのですか?PHPでWebページをキャッシュするにはどうすればいいですか?

ありがとうございました。 PS:私は初心者です。

+0

Zend Frameworkなどのフレームワークを使用していますか?詳細を教えてください! – Thomaschaaf

+1

私はフレームワークを使用していません。 – user187580

+0

これをフレームワークに移動することを検討してください。 http://code.google.com/p/samstyle-php-framework - ファイルキャッシングを含み、memcacheをサポートするフルハンドフレームワーク – mauris

答えて

13

実際には、スクリプトを終了する前にページの出力を保存してから、スクリプトの先頭にキャッシュをロードすることができます。

コード例:

cachestart.php中:

<?php 
$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache 
$cachetime = 3600; // time to cache in seconds 

if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){ 
    $c = @file_get_contents($cf); 
    echo $c; 
    exit; 
}else{ 
    unlink($cachefile); 
} 

ob_start(); 
?> 

cacheend.php中:

<?php 

$c = ob_get_contents(); 
file_put_contents($cachefile); 

?> 

<?php 

$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache 
$cachetime = 3600; // time to cache in seconds 

if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){ 
    $c = @file_get_contents($cf); 
    echo $c; 
    exit; 
}else{ 
    unlink($cachefile); 
} 

ob_start(); 

// all the coding goes here 

$c = ob_get_contents(); 
file_put_contents($cachefile); 

?> 

あなたはこれを行うことができ、このキャッシュを必要とするページがたくさんある場合

次に、スクリプトの最初に、

を追加するだけです。あなたのスクリプトの最後に

include('cacheend.php'); 

を追加してください。 という名前のフォルダにというキャッシュがあり、PHPがアクセスできるようにしてください。

フルページキャッシュを実行している場合、キャッシュされているため、ページにSESSION固有のディスプレイ(たとえば、ディスプレイメンバーのバーや何など)が表示されないようにしてください。特定のキャッシングのためのフレームワークを見てください(可変またはページの一部)。

+0

このコードはどこに置くのですか? index.php? – user187580

+0

は、ここに '//すべてのコーディングがここに書かれました 'と書いた部分に気づいた?メインコードをそこに置くことができます。 – mauris

+0

わかりました。私はそれを試してチェックします。ありがとう。 – user187580

0

memcachedを使用してください。そのサイトでそれを行う方法の説明があります。

0

Squidを使用するか、ブラウザのキャッシュを行うためにHTTPヘッダーを正しく更新してください。私は質問に基づいてキャッシュの独自のバージョンをスピンする必要はないと思う。

4

さらにmaurisの答えに私はこれを指摘したいと思います:

あなたはキャッシュを使用するときに注意する必要があります。動的なデータ(静的なhtmlではなくphpを使用する場合に当てはまるはずです)がある場合、対応するデータが変更されたときにキャッシュを無効にする必要があります。

これは、あなたのダイナミックデータの種類に応じて、非常に簡単か非常に扱いにくい場合があります。

更新

キャッシュを無効にする方法は、キャッシュの具体的な種類によって異なります。あなたはどのキャッシュファイルがどのページに属しているのかを知る必要があります。データが変更されたら、キャッシュされたファイルを削除するか、キャッシュデータ構造からページ出力を削除する必要があります。

キャッシングに使用するインプリメンテーションを知らなくても、これ以上詳しい情報を提供することはできません。

他の人々は、例えば、Pearパッケージまたはmemcachedを提案しています。これらは、データが変更されたときにキャッシュ全体またはその一部を無効にするために必要な機能を備えています。

+0

キャッシュを無効にするいくつかのアイデアを投げてください..ありがとう。 – user187580

+0

@Patrick、実際には、キャッシュにはハードディスクへのアクセスが必要です。それは遅くないでしょうか? – Pacerier

+0

さて、通常OSには独自のファイルキャッシュがあるので、ファイルを使用してもメモリから提供される可能性があります。キャッシュされた結果をディスクから読み取ってページを再計算するよりも、パフォーマンスが向上することがほとんどです。それを計算する方が速ければ、キャッシュしないでください。 –

0

PEARは、キャッシングパッケージ(実際には2)を持つ:

http://pear.php.net/package/Cache
小さなアプリを

ため http://pear.php.net/package/Cache_Lite私は一度クエリキャッシュのキャッシュパッケージ(最初の1)を使用し、その時点でそれはそのやりました私が覚えている限り働いてください。

3
$c = ob_get_contents(); 
file_put_contents($cachefile); 

正しいは、そうでない場合、スクリプトは動作しません

$c = ob_get_contents(); 
file_put_contents($cachefile,$c); 

です。