我正在尝试从菜单中创建一个缓存文件,该菜单采用名为' 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);
}
?>
答案 0 :(得分:1)
file_get_contents()
获取文件的内容,但不以任何方式执行。 include()
将执行PHP,但您必须使用输出缓冲区来获取其输出。
ob_start();
include('includes/menu.php');
$cache = ob_get_flush();
file_put_contents($cache_file, $cache);
答案 1 :(得分:0)
这一行
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);