動的コンテンツをキャッシュするためのこの単純な方法はregister_shutdown_function()
、スクリプトの終了後に、出力バッファーをディスク上のファイルにプッシュするために使用します。ただし、私はこれが機能しないPHP-FPMを使用しています。関数に 5 秒間のスリープを追加すると、ブラウザからのスクリプトの実行に 5 秒間の遅延が発生します。PHP ドキュメントのコメント投稿者は、PHP-FPM ユーザー向けの特別な関数、つまりfastcgi_finish_request()
. ただし、この特定の機能に関するドキュメントはあまりありません。
のポイントは、fastcgi_finish_request()
すべてのデータをフラッシュして他のタスクを続行することのようですが、私が達成したいのは、通常register_shutdown_function()
.終わる。
fastcgi_finish_request()
または別の関数を使用して、PHP-FPMでこれを達成する方法はありますか?
$timeout = 3600; // cache time-out
$file = '/home/example.com/public_html/cache/' . md5($_SERVER['REQUEST_URI']); // unique id for this page
if (file_exists($file) && (filemtime($file) + $timeout) > time()) {
readfile($file);
exit();
} else {
ob_start();
register_shutdown_function(function () use ($file) {
// sleep(5);
$content = ob_get_flush();
file_put_contents($file, $content);
});
}