这种缓存动态内容的简单方法用于register_shutdown_function()
在退出脚本后将输出缓冲区推送到磁盘上的文件。但是,我使用的是PHP-FPM,这不起作用;添加到函数中的 5 秒睡眠确实会导致从浏览器执行脚本时延迟 5 秒。PHP 文档中的评论者指出,PHP-FPM 用户有一个特殊功能,即fastcgi_finish_request()
. 但是,没有太多关于这个特定功能的文档。
的重点fastcgi_finish_request()
似乎是刷新所有数据并继续执行其他任务,但我想要实现的,通常会使用register_shutdown_function()
,基本上是将输出缓冲区的内容放入文件中,而无需用户等待完成。
有没有办法在 PHP-FPM 下使用fastcgi_finish_request()
或其他功能来实现这一点?
$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);
});
}