我一直使用相同的缓存类将元素数组缓存到文件中,并且每次都运行良好。但是当我尝试将它与 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 上。即使在同一网络服务器上的其他域上,此类也适用于其他地方。所以我认为问题在于使用飞行框架?