0

「includes/menu.php」と呼ばれるランダム データを取得するメニューからキャッシュ ファイルを作成しようとしています。そのファイルを手動で実行すると、ランダム データが作成されます。動作します。ここで、このデータを一定時間ファイルにキャッシュしてから、再キャッシュしたいと考えています。コードキャッシュが作成されているため、2つの問題が発生していますが、完全なphpページがキャッシュされ、結果はキャッシュされず、実行せずにコードのみがキャッシュされます。私は何を間違っていますか?ここに私が今まで持っているものがあります:

<?php
$cache_file = 'cachemenu/content.cache';
if(file_exists($cache_file)) {
  if(time() - filemtime($cache_file) > 86400) {
     // too old , re-fetch
     $cache = file_get_contents('includes/menu.php');
     file_put_contents($cache_file, $cache);
  } else {
     // cache is still fresh
  }
} else {
  // no cache, create one
  $cache = file_get_contents('includes/menu.php');
  file_put_contents($cache_file, $cache);
}
?>
4

2 に答える 2

2

この行

file_get_contents('includes/menu.php');

実行せずにphpファイルを読み取るだけです。代わりに次のコードを使用してください (これにより、php ファイルが実行され、結果が変数に保存されます)。

ob_start();
include 'includes/menu.php';
$buffer = ob_get_clean();

そして、取得したコンテンツ($buffer)をファイルに保存するだけです

file_put_contents($cache_file, $buffer);
于 2015-06-26T19:14:48.987 に答える
1

file_get_contents()ファイルの内容を取得しますが、決して実行しません。include()は PHP を実行しますが、その出力を取得するには出力バッファーを使用する必要があります。

ob_start();
include('includes/menu.php');
$cache = ob_get_flush();
file_put_contents($cache_file, $cache);
于 2015-06-26T19:10:23.240 に答える