file_put_contents создать новый файл

Мой скрипт ниже работает, когда файл кеша уже присутствует, но не создает сам первый исходный файл кеша.

Кто-нибудь может мне помочь?
Права доступа к папке в порядке.

<?php 
$cache_file = 'cachemenu/content.cache';

if(file_exists($cache_file)) {
  if(time() - filemtime($cache_file) > 86400) {

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

  } 

  else include 'cachemenu/content.cache';

}

?>

2 ответа

Решение

Вы пишете в файл, только если он существует и он старый. Вы должны изменить if поэтому он пишет в него, если его тоже не существует.

<?php 
$cache_file = 'cachemenu/content.cache';

if(!file_exists($cache_file) || time() - filemtime($cache_file) > 86400) {

    ob_start();
    include 'includes/menu.php';
    $buffer = ob_get_flush();
    file_put_contents($cache_file, $buffer); 
} else {
    include 'cachemenu/content.cache';
}

?>

Ваше условие говорит PHP "включить файл, если файл не существует".

Вот почему сценарий никогда не создает файл кэша в первую очередь, потому что при каждой загрузке сценария (включая первый) ваши условные состояния "Если файла нет, включите файл".

Вам нужно сделать условный "файл не существует", например:

if(!file_exists($cache_file)) {

  // File does not exist - create the file

} else {  

  // File does exist - show the file (include)

}
Другие вопросы по тегам