cache.php

来自「全新且完善的强大网上商店系统」· PHP 代码 · 共 186 行

PHP
186
字号
<?php

/*
  [SOOBIC!] cache.php 

	Version: 1.5
	Author: soolan (soolan@qq.com)
	Copyright: soolan (www.soobic.com)
	Last Modified: 2005/4/1 10:00

*/


if(!defined('IN_SOOBIC')) {
        exit('Access Denied');
}

function arrayeval($array, $level = 0) {
	for($i = 0; $i <= $level; $i++) {
		$space .= "\t";
	}
	$evaluate = "Array\n$space(\n";
	$comma = "$space";
	foreach($array as $key => $val) {
		$key = is_string($key) ? "'".addcslashes($key, '\'\\')."'" : $key;
		$val = is_string($val) ? "'".addcslashes($val, '\'\\')."'" : $val;
		if(is_array($val)) {
			$evaluate .= "$comma$key => ".arrayeval($val, $level + 1);
		} else {
			 if($val=='') {
			    $evaluate .= "$comma$key => ''";
			 }else{
			    $evaluate .= "$comma$key => $val";
			 }
		}
		$comma = ",\n$space";
	}
	$evaluate .= "\n$space)";
	return $evaluate;
}

function updatecache($cachename = '') {
  
	global $db, $table_styles, $table_stylevars,$table_templates, $table_usergroups,$table_configuration,$table_manufacturers,$table_manufacturers_info;

	$cachescript = array(	
	           'index'	=> array( 'usergroups'),
	           'categories'	=> array('categories'),
	           'shopping_cart'	=> array( 'usergroups'),
	           'checkout_confirmation'	=> array( 'usergroups'),
	           'checkout_process'	=> array( 'usergroups'),
	           'product_info'	=> array( 'usergroups','manufacturers')
			);

	foreach($cachescript as $script => $cachenames) {
		if(!$cachename || ($cachename && in_array($cachename, $cachenames))) {
			writetocache($script, $cachenames);
		}
	}
  if(!$cachename || $cachename == 'styles') {
		
		$stylevars = array();

		$query = $db->query("SELECT * FROM $table_stylevars");
		while($var = $db->fetch_array($query)) {
			$stylevars[$var['styleid']][$var['variable']] = $var['substitute'];
		}

		$query = $db->query("SELECT s.*, t.charset, t.directory AS tpldir FROM $table_styles s LEFT JOIN $table_templates t ON s.templateid=t.templateid");
		
		while($data = $db->fetch_array($query)) {
			$data = array_merge($data, $stylevars[$data['styleid']]);

			$data['bgcode'] = strpos($data['bgcolor'], '.') ? "background-image: url(\"$data[imgdir]/$data[bgcolor]\")" : "background-color: $data[bgcolor]";
			$data['catbgcode'] = strpos($data['catcolor'], '.') ? "background-image: url(\"$data[imgdir]/$data[catcolor]\")" : "background-color: $data[catcolor]";
			$data['headerbgcode'] = strpos($data['headercolor'], '.') ? "background-image: url(\"$data[imgdir]/$data[headercolor]\")" : "background-color: $data[headercolor]";
			$data['boardlogo'] = image($data['boardimg'], $data['imgdir'], "alt=\"$bbname\"");
			$data['bold'] = $data['nobold'] ? 'normal' : 'bold';

			writetocache($data['styleid'], '', getcachevars($data, 'CONST'), 'style_');
		}
	}
	if(!$cachename || $cachename == 'usergroups') {
		$query = $db->query("SELECT * FROM $table_usergroups");
		while($data = $db->fetch_array($query)) {
			writetocache($data['groupid'], '', getcachevars($data), 'usergroup_');
		}
	}
	if(!$cachename || $cachename == 'settings') {
		$query = $db->query("SELECT configuration_key, configuration_value FROM $table_configuration");
		$settings_data=array();
		while($data = $db->fetch_array($query)) {
			  $settings_data[$data[configuration_key]]=$data[configuration_value];
		}
		writetocache('settings', '', getcachevars($settings_data,ii), 'cache_');
	}
}

function writetocache($script, $cachenames, $cachedata = '', $prefix = 'cache_') {
	global $db;
	if(is_array($cachenames) && !$cachedata) {
		foreach($cachenames as $name) {
			$cachedata .= getcachearray($name);
		}
	}

	$dir = "./oscdata/cache/";
	if(!is_dir($dir)) {
		@mkdir($dir, 0777);
	}		
	if(@$fp = fopen("$dir$prefix$script.php", 'w')) {
		fwrite($fp, "<?php\n//kisen! cache file, DO NOT modify me!\n".
			"//Created on ".date("M j, Y, G:i")."\n\n$cachedata?>");
		fclose($fp);
	} else {
		soobic_exit('Can not write to cache file, please check directory ./oscdata/ and ./oscdata/cache/ .');
	}
}

function getcachearray($cachename) {
	global $db;

	$cols = '*';
	$conditions = '';
	switch($cachename) {
		case settings:
			$table = $GLOBALS['table_configuration'];
			$cols = "configuration_key, configuration_value";
			break;
	  case manufacturers:
			$table = $GLOBALS['table_manufacturers'].' as m left join '.$GLOBALS['table_manufacturers_info'].' as mi ';
			$cols = " m.manufacturers_id, m.manufacturers_name,m.manufacturers_image,mi.languages_id,mi.manufacturers_url";
			$conditions = " on m.manufacturers_id=mi.manufacturers_id";
			break;
		case categories:
			$table = $GLOBALS['table_categories'].' as c left join '.$GLOBALS['table_categories_description'].' as cd ';
			$cols = " c.categories_id, c.categories_image,c.parent_id,cd.language_id,cd.categories_name ";
			$conditions = " on c.categories_id=cd.categories_id ORDER BY sort_order ";
			break;
		case usergroups:
			$table = $GLOBALS['table_usergroups'];
			$cols = "specifiedusers, status, grouptitle, creditshigher, creditslower, groupdiscount";
			$conditions = "ORDER BY creditslower ASC";
			break;
	}

	$data = array();
	$query = $db->query("SELECT $cols FROM $table $conditions");
	switch($cachename) {
		case 'settings':
			$data = $db->fetch_array($query);
			while($datarow = $db->fetch_array($query)) {
			}
			break;
		case 'categories':
			while($category = $db->fetch_array($query)) {
				$data[$category['language_id']][$category['categories_id']] = $category;
				//$category['name'] = strip_tags($category['name']);
				unset($category['categories_id']);
			}
			break;
		case 'manufacturers':
			while($manufacturer = $db->fetch_array($query)) {
				$data[$manufacturer['languages_id']][$manufacturer['manufacturers_id']] = $manufacturer;
				//$category['name'] = strip_tags($category['name']);
				unset($manufacturer['manufacturers_id']);
			}
			break;
		default:
			while($datarow = $db->fetch_array($query)) {
				$data[] = $datarow;
			}
	}
	return "\$S_CACHE['$cachename'] = ".arrayeval($data).";\n\n";
}

function getcachevars($data, $type = 'VAR') {
	foreach($data as $key => $val) {
		$val = str_replace("'", "\\'", $val);
		$evaluate .= $type == 'VAR' ? "\$$key = '$val';\n" : "define('".strtoupper($key)."', '$val');\n";
	}
	return $evaluate;
}

?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?