2015-06-26 3 views
0

Я пытаюсь создать файл кеша из меню, которое принимает случайные данные, называемые «includes/menu.php», случайные данные создаются, когда я запускаю этот файл вручную, он работает. Теперь я хочу кэшировать эти данные в файл в течение определенного времени, а затем обновить его. У меня запущено 2 проблемы, из моего кеша кода создается, но он кэширует полную страницу php, он не кэширует результат, а только код без его выполнения. Что я делаю не так ? Вот что у меня до сих пор:создать php-кеш с файлом_get_contents

<?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

Вам нужно захватить и сохранить вывод 'buffer' файла' php', а не файл 'php'. Пожалуйста, взгляните на https://secure.php.net/manual/en/function.ob-start.php –

ответ

0

Эта линия

file_get_contents('includes/menu.php'); 

просто прочитать файл PHP, без его выполнения. Используйте этот код вместо (который будет выполнять файл PHP и сохранить результат в переменную):

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

И затем, просто сохранить извлеченное содержимое ($ буфера) в файл

file_put_contents($cache_file, $buffer); 
1

file_get_contents() получает содержимое файла, он не выполняет его каким-либо образом. include() выполнит PHP, но вы должны использовать выходной буфер, чтобы захватить его вывод.

ob_start(); 
include('includes/menu.php'); 
$cache = ob_get_flush(); 
file_put_contents($cache_file, $cache); 
+0

'ob_get_clean' также может быть вам полезен. 'flush' будет выводить его, а также кэшировать его, в то время как' clean' не выводит его - вам нужно будет эхо его по своему желанию. – ceejayoz

 Смежные вопросы

  • Нет связанных вопросов^_^