0

我一直使用相同的缓存类将元素数组缓存到文件中,并且每次都运行良好。但是当我尝试将它与 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 时使用此代码:致命错误:在第 136 行的 /var/www/ctifiles/views/search_main.php 中的非对象上调用成员函数 fetch()

当我改变

$pirmiRezai = rezultataiVienas($uzkla);

$pirmiRezai = pirmi_rezultatai($uzkla);

在代码的最后,它工作得很好,所以问题出在 cacheClass 上。即使在同一网络服务器上的其他域上,此类也适用于其他地方。所以我认为问题在于使用飞行框架?

4

0 回答 0