В php я создаю файл кеша для хранения сложных переменных результатов. Одна переменная, один файл кэша. Хорошо сделали свою работу отлично.
Проблема заключается в сроке работы кеша. На данный момент я поместил в файл тайм-аут и переменную, но она не оптимизирована, потому что я должен открыть файл, чтобы проверить тайм-аут.
Я хочу (если это возможно) проверить время ожидания для свойства файла (например, дату последнего изменения с помощью функции filemtime ()). Можем ли мы добавить пользовательское свойство в файл?
Другой способ — добавить тайм-аут в имя файла, а не мое любимое решение.
[Редактировать]final class Cache_Var extends Cache {
public static function put($key, $value, $timeout=0) {
// different timeout by variable (if 0, infinite timeout)
}
public static function get($key) {
// no timeout to get a var cache
// return null if file not found, or if timeout expire
// return var otherwise
}
}
filectime()
может действительно помочь вам
$validity = 60 * 60; // 3600s = 1 hour
if(filectime($filename) > time() - $validity) {
// cache is valid
} else {
// cache is invalid: recreate it
}
Есть несколько кеширующих fdrameworks, которые используют именно этот механизм.
Редактировать:
Если вам нужно другое время ожидания для элемента кэша, чем использовать touch()
установить время модификации файлов кеша. Вы даже можете установить время модификации на будущее значение и напрямую сравнить filectime
с текущим временем.
final class Cache_Var extends Cache {
public static function put($key, $value, $timeout=0) {
// different timeout by variable (if 0, infinite timeout)
// ...
touch($filename, time() + $timeout);
// For static files with unlimited lifetime I would simply store
// them in a separate folder
}
}
Других решений пока нет …