私は、さまざまなWebホストを使用して、かなり非技術的なユーザーによって展開される多くの異なるクライアント/サイトに送信されるPHPスクリプトにある種のキャッシュを実装しようとしています。ユーザーの非技術的な性質のため、ファイルのアクセス許可を微調整するようにユーザーに依頼することは避けたいと思います。キャッシングはセッション間で行う必要があるため、セッション変数の使用は不要です。これをASPでコーディングする場合は、アプリケーション変数を使用しますが、PHPには存在しません(私の知る限り)
誰かがこれを達成する方法について何か提案がありますか?
これが私が考えたいくつかの可能性です、これらについてのコメントは役に立つでしょう:
- システム一時フォルダー内のファイルを介したキャッシュ-sys_get_temp_dir()(またはPHP4のホームロールされた同様の関数)を使用して、そのようなフォルダーを見つけることができます。ここでの欠点は、openbase_dir制限を使用しているホストではおそらく機能しないことです。
- 私が見たいくつかのWebサイトでは、PHPをだましてすべてのユーザーセッションを同じセッション状態で共有させ、それによってセッション変数をセッション変数のように動作させることに言及しました。もちろん、今はその投稿を見つけることができません...これはとにかく怖いようです。(この質問をもう一度見つけたら、この投稿へのリンクで更新します)
- AmazonのSimpleStorageServiceのようなサードパーティのデータストアを使用する-やり過ぎのようです
- 私が制御するサーバーにデータをキャッシュし、ヒットするたびにクライアントにそこから新しいデータをダウンロードさせます。
繰り返しになりますが、これらのアイデアや新しいアイデアについてのコメントをいただければ幸いです。
更新: session_id()を使用して共有セッション状態を使用しようとしましたが、機能しません。各セッションは独自の「GlobalCache」を維持していますが、その理由は何ですか?:
// This code doesn't work, but the similar code in my answer does!
function test() {
if (!$_SESSION['session_count']) $_SESSION['session_count'] = 0;
$_SESSION['session_count']++;
$count = get_cache( 'count' );
print "pre application count: $count<br>";
if ( !$count )
$count = 0;
$count++;
print "session_id: " . session_id() . "<br>";
print "post application count: $count<br>";
print "session_count: " . $_SESSION['session_count'] . "<br>";
set_cache('count', $count);
}
function set_cache( $name, $value ) {
$old_session = session_id();
print "old_session (set): $old_session<br>";
session_id("GlobalCache");
print "new_session (set): " . session_id() . "<br>";
$_SESSION[$name] = $value;
session_id( $old_session );
}
function get_cache( $name ) {
$old_session = session_id();
print "old_session (get): $old_session<br>";
session_id("GlobalCache");
print "new_session (get): " . session_id() . "<br>";
$value = $_SESSION[$name];
session_id( $old_session );
return $value;
}
session_start();
test();
更新: memcachedの使用を提案する人もいますが、これは実際には一部の人にとっては優れたソリューションですが、エンドサーバー環境を制御できないため、オプションではありません。アイデアは、人々が箱から出してすぐに機能する共有ホスティングアカウントにFTPで接続できるスクリプトを用意することです。
更新:誰かがスクリプトを使用して独自のキャッシュフォルダーを作成することを提案しましたが、既に書き込みアクセス許可が設定されているフォルダー内にそのようなフォルダーを作成する必要はありませんか?
更新、解決策が見つかりました:グローバルセッションスクリプトの問題を理解し、その影響に対する独自の回答を投稿しました。みんな助けてくれてありがとう。