Вызов функции-члена fetch() ошибка при использовании кеш-класса в платформе Flight

Я всегда использовал один и тот же класс кеша для кеширования массива элементов в файл, и каждый раз он работал нормально. Но когда я пытаюсь использовать его с микро-фреймворком Flight PHP, я не могу заставить его работать. Вот моя часть index.php, которая ссылается на страницы с кешем:

Flight::route('/results/@uzklausa', function($uzklausa){
    //include 'funcs/functions.new.php';
    include 'funcs/simple_html_dom.php';
    Flight::register('db2', 'PDO', array('mysql:host=localhost;port=3306;dbname=rasti_failai', 'root', 'pw'), function($db) {
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    });
    //Flight::etag($uzklausa);
    Flight::set('uzklausa', $uzklausa);
    Flight::render('search_main', array('uzklausa' => $uzklausa));
    Flight::render('footer');
});

И вот мой класс кеша ведьмы в файле search_main.php:

$uzkla = str_replace('-', ' ', Flight::get('uzklausa'));

class FileCache {

  // Funkcija issaugoti informacijai
  function store($key,$data,$ttl) {

    // Atidarom faila
    $h = fopen($this->getFileName($key),'w');
    if (!$h) throw new Exception('Could not write to cache');
    // Serializinam su  TTL
    $data = serialize(array(time()+$ttl,$data));
    if (fwrite($h,$data)===false) {
      throw new Exception('Could not write to cache');
    }
    fclose($h);

  }

  // paprasta funkcija kad surasti faila pagal key
  private function getFileName($key) {

      return 'newcache/s_cache' . md5($key);

  }

  //grazina false on failure
  function fetch($key) {

      $filename = $this->getFileName($key);
      if (!file_exists($filename) || !is_readable($filename)) return false;

      $data = file_get_contents($filename);

      $data = @unserialize($data);
      if (!$data) {

         // Unlinkinam file kai unserializing failed
         unlink($filename);
         return false;

      }

      // tikrinam ar expired
      if (time() > $data[0]) {

         // Unlinkinam
         unlink($filename);
         return false;

      }
      return $data[1];
    }

}

Затем идет моя функция, которая возвращает массив, который должен быть кэширован:

function pirmi_rezultatai($uzklausa)

  { some php code wich works fine and is displayed if no cache is on }

а затем функция, которая использует cacheClass для кэширования массива:

$cache = new FileCache();
function rezultataiVienas($uzklausa) {

    global $cache;

    // Unikalus key ID
    $key = 'pirmas-'.$uzklausa.''; //ALso tried changing this to $key = 'pirmas'; for debug, nothing changed

    // tikrinam ar jau cachintas
    if (!$data = $cache->fetch($key)) {
       //Jei nera atliekam nauja funkcija ir paimam duomenis
       $data = pirmi_rezultatai($uzklausa);

       //ir juos uzcachinam
       $cache->store($key,$data,1440000); // 1440000 2592000 12960000
    }
    return $data;
}

$pirmiRezai = rezultataiVienas($uzkla);
print_r($pirmiRezai);

и с этим кодом, когда я обращаюсь к mydomain.com/results/anything, который я получаю: Неустранимая ошибка: вызов функции-члена fetch() для необъекта в /var/www/ctifiles/views/search_main.php в строке 136

когда я меняюсь

$pirmiRezai = rezultataiVienas($uzkla);

в

$pirmiRezai = pirmi_rezultatai($uzkla);

в конце кода, он работает отлично, поэтому проблема с cacheClass. Также этот класс хорошо работает даже в других доменах на одном веб-сервере. Так что я думаю, проблема в использовании фреймворка?

0 ответов

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