@deepin

Как исправить ошибку unserialize()?

класс

<?php


namespace core\libs;


class Cache
{
   public function set($key, $data, $seconds = 3600)
    {
        $content['data'] = $data;
        $content['end_time'] = time() + $seconds;
        if (file_put_contents(CACHE . '/' . md5($key) . '.txt', serialize($content))) {
            return true;
        }
        return false;
    }

    public function get($key)
    {
        $file_cache = CACHE . '/' . md5($key) . '.txt';
        if (file_exists($file_cache)) {
            $content = unserialize($file_cache);
            if (time() <= $content['end_time']) {
                return $content['data'];
            }
            unlink($file_cache);
        }
        return false;
    }

    public function delete($key)
    {
        $file_cache = CACHE . '/' . md5($key) . '.txt';
        if (file_exists($file_cache)) {
            unlink($file_cache);
        }
    }
}


применение
$test = $this->registry->cache->get('test');
if (!$test) {
    $this->registry->cache->set('test', 'Тестовый кеш');
}

в результате при первом обновлении страницы создаётся файл 098f6bcd4621d373cade4e832627b4f6.txt с содержимым
a:2:{s:4:"data";s:23:"Тестовый кеш";s:8:"end_time";i:1564633278;}

при втором и последующих обновлениях страницы
имеем вот такой результат

5d425c65e0507281714706.png
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
в функции get пропущено само чтение из файла, например, file_get_contents, наверное должно быть что-то:
public function get($key)
    {
        $file_cache = CACHE . '/' . md5($key) . '.txt';
        if (file_exists($file_cache)) {
            $content = unserialize(   file_get_contents($file_cache));
            if (time() <= $content['end_time']) {
                return $content['data'];
            }
            unlink($file_cache);
        }
        return false;
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы