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)
}