PHPで大規模サイトを作成しており、キャッシュ処理に困っています。

【処理内容】
初めて、do.php?a=1 にアクセスしたとき、1.txt を生成してキャッシュとして保存。
で、他の人が do.php?a=1 にアクセスしたとき、PHPを実行しないで、1.txtを直接参照するような形式にしたいです。
 
何をどうするとできますでしょうか?
具体的なやり方を教えて頂ければ助かります。
宜しくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:2008/02/03 02:19:01
  • 終了:2008/02/05 01:40:20

ベストアンサー

id:openseed No.5

openseed回答回数51ベストアンサー獲得回数62008/02/04 09:25:43

ポイント36pt

mod_rewrite が使えるのが前提ですが、リクエストURLを以下のように変更すると、可能かもしれません。

http://hostname/do/a/1.txt

.../htdocs/do/.htaccess の中に、

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/(.*?)$ index.php?$1=$2 [QSA,L]
</IfModule>
DirectoryIndex index.php

index.php の中で、

.../htdocs/do/a/1.txt

にファイルを出力すれば、おそらくPHPは呼ばれません。。。

id:wqwqwqwq

ずばりこれです!

試してみます。有難うございます。

2008/02/05 01:38:35

その他の回答(4件)

id:ctrl-v No.1

ctrl-v回答回数289ベストアンサー獲得回数152008/02/03 04:30:03

ポイント13pt

PHPを実行しないやり方ではありませんが、PHPの負荷を軽くするために、

PEARのCache_Liteを利用されてみてはいかがでしょうか。

http://php.y-110.net/wiki/index.php?PEAR%A1%A7Cache_Lite

id:tezcello No.2

tezcello回答回数460ベストアンサー獲得回数692008/02/03 11:50:03

ポイント25pt

mod_rewrite が使えるのが前提ですが、こんな構造はどうでしょう?


リンク先のアドレスは、全てキャッシュファイルを指すようにしておく。

そのファイルがない場合は、ファイル名からパラメータを分離し、スクリプトに渡す。

  1.txt -> do.php?a=1 の様に書き換える

  RewriteCond %{REQUEST_FILENAME} !-f

  writeRule ^(.+?)\.txt$ do.php?a=$1 [L]

スクリプトではキャッシュファイルの作成をし、それをブラウザへ返す。

id:nohohon_x No.3

nohohon_x回答回数72ベストアンサー獲得回数12008/02/03 13:19:18

ポイント13pt

Smartyのページキャッシュ機能はいかがでしょうか?insertプラグインで一部動的にすることも可能です。

http://www.smarty.net/manual/ja/caching.php

id:yoneto164 No.4

ヨネちゃん回答回数813ベストアンサー獲得回数942008/02/03 17:59:55

ポイント13pt

PHPを実行しないわけでなはいのですが、PHPの最初に

if (file_exists($filename) && date(filemtime($filename)) > $re){
require $filename;
}

などとして、$filenameが存在し、更新期限以内である場合は$filenameを読み込んで表示する方法を使っています。

$filenameを作成する方法は、$html .= ;にHTMLを足していき、

$inc = fopen($filename,"w");
fwrite($inc,$html);
fclose($inc);

などで書き出します。

id:openseed No.5

openseed回答回数51ベストアンサー獲得回数62008/02/04 09:25:43ここでベストアンサー

ポイント36pt

mod_rewrite が使えるのが前提ですが、リクエストURLを以下のように変更すると、可能かもしれません。

http://hostname/do/a/1.txt

.../htdocs/do/.htaccess の中に、

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/(.*?)$ index.php?$1=$2 [QSA,L]
</IfModule>
DirectoryIndex index.php

index.php の中で、

.../htdocs/do/a/1.txt

にファイルを出力すれば、おそらくPHPは呼ばれません。。。

id:wqwqwqwq

ずばりこれです!

試してみます。有難うございます。

2008/02/05 01:38:35
  • id:openseed
    心配することではないかもしれませんが、以下のようなリクエストには、注意する必要があるかもしれません。
     http://hostname/do/a/../index.php

    以下のコマンドを利用した上で、 ドット(.) で始まるリクエストなどは注意も必要です。
     http://jp2.php.net/basename

    紹介しておいて、無責任かもしれませんが、セキュリティについては、自己責任でお願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません