<?php
/**
* cache Class.
*
* @package classes
* @copyright Copyright 2003-2011 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version $Id: cache.php 18695 2011-05-04 05:24:19Z drbyte $
*/
}
/**
* cache Class.
* handles query caching
*
* @package classes
*/
class cache extends base {
function sql_cache_exists($zf_query, $zf_cachetime) {
$zp_cache_name = $this->cache_generate_cache_name($zf_query);
switch (SQL_CACHE_METHOD) {
case 'file':
// where using a single directory at the moment. Need to look at splitting into subdirectories
// like adodb
if (file_exists(DIR_FS_SQL_CACHE
. '/' . $zp_cache_name . '.sql') && !$this->sql_cache_is_expired($zf_query, $zf_cachetime)) {
return true;
} else {
return false;
}
break;
case 'database':
$sql = "select * from " . TABLE_DB_CACHE . " where cache_entry_name = '" . $zp_cache_name . "'";
$zp_cache_exists = $db->Execute($sql);
if ($zp_cache_exists->RecordCount() > 0 && !$this->sql_cache_is_expired($zf_query, $zf_cachetime)) {
return true;
} else {
return false;
}
break;
case 'memory':
return false;
break;
case 'none':
default:
return false;
break;
}
}
function sql_cache_is_expired($zf_query, $zf_cachetime) {
$zp_cache_name = $this->cache_generate_cache_name($zf_query);
switch (SQL_CACHE_METHOD) {
case 'file':
if (@filemtime(DIR_FS_SQL_CACHE
. '/' . $zp_cache_name . '.sql') > (time() - $zf_cachetime)) {
return false;
} else {
return true;
}
break;
case 'database':
$sql = "select * from " . TABLE_DB_CACHE . " where cache_entry_name = '" . $zp_cache_name ."'";
$cache_result = $db->Execute($sql);
if ($cache_result->RecordCount() > 0) {
$start_time = $cache_result->fields['cache_entry_created'];
if (time() - $start_time > $zf_cachetime) return true;
return false;
} else {
return true;
}
break;
case 'memory':
return true;
break;
case 'none':
default:
return true;
break;
}
}
function sql_cache_expire_now($zf_query) {
$zp_cache_name = $this->cache_generate_cache_name($zf_query);
switch (SQL_CACHE_METHOD) {
case 'file':
@unlink(DIR_FS_SQL_CACHE
. '/' . $zp_cache_name . '.sql');
return true;
break;
case 'database':
$sql = "delete from " . TABLE_DB_CACHE . " where cache_entry_name = '" . $zp_cache_name . "'";
$db->Execute($sql);
return true;
break;
case 'memory':
unset($this->cache_array[$zp_cache_name]);
return true;
break;
case 'none':
default:
return true;
break;
}
}
function sql_cache_store($zf_query, $zf_result_array) {
$zp_cache_name = $this->cache_generate_cache_name($zf_query);
switch (SQL_CACHE_METHOD) {
case 'file':
$fp = fopen(DIR_FS_SQL_CACHE
. '/' . $zp_cache_name . '.sql',"w");
return true;
break;
case 'database':
$sql = "select * from " . TABLE_DB_CACHE . " where cache_entry_name = '" . $zp_cache_name . "'";
$zp_cache_exists = $db->Execute($sql);
if ($zp_cache_exists->RecordCount() > 0) {
return true;
}
$sql = "insert into " . TABLE_DB_CACHE . " set cache_entry_name = '" . $zp_cache_name . "',
cache_data = '" . $result_serialize . "',
cache_entry_created = '" . time() . "'";
$db->Execute($sql);
return true;
break;
case 'memory':
return true;
break;
case 'none':
default:
return true;
break;
}
}
function sql_cache_read($zf_query) {
$zp_cache_name = $this->cache_generate_cache_name($zf_query);
switch (SQL_CACHE_METHOD) {
case 'file':
$zp_fa = file(DIR_FS_SQL_CACHE
. '/' . $zp_cache_name . '.sql');
return $zp_result_array;
break;
case 'database':
$sql = "select * from " . TABLE_DB_CACHE . " where cache_entry_name = '" . $zp_cache_name . "'";
$zp_cache_result = $db->Execute($sql);
return $zp_result_array;
break;
case 'memory':
return true;
break;
case 'none':
default:
return true;
break;
}
}
function sql_cache_flush_cache() {
switch (SQL_CACHE_METHOD) {
case 'file':
if ($za_dir = @dir(DIR_FS_SQL_CACHE
)) {
while ($zv_file = $za_dir->read()) {
@unlink(DIR_FS_SQL_CACHE
. '/' . $zv_file);
}
}
$za_dir->close();
}
return true;
break;
case 'database':
$sql = "delete from " . TABLE_DB_CACHE;
$db->Execute($sql);
return true;
break;
case 'memory':
return true;
break;
case 'none':
default:
return true;
break;
}
}
function cache_generate_cache_name($zf_query) {
switch (SQL_CACHE_METHOD) {
case 'file':
return 'zc_' . md5($zf_query);
break;
case 'database':
return 'zc_' . md5($zf_query);
break;
case 'memory':
return 'zc_' . md5($zf_query);
break;
case 'none':
default:
return true;
break;
}
}
}