www.gusucode.com > 网猫影视系统NetMao Movie 4.6.6 开源版源码程序 > upload/inc/cache.func.php

    <?php
/*
*######################################
* Netmao Movie 4.x - NetMao Movie System
* Copyright (c) 2007-2008 NetMao.cn
* For further information go to http://www.netmao.cn/
* This copyright notice must stay intact for use.
*######################################
*/
if(!defined('IN_NetMao')) exit('Access Denied');

function updatecache($cachename = '') {
	global $db, $bbname, $tablepre, $en_movie, $_NCACHE;

	static $cachescript = array
		(
		'announces' => array('announces'),
		'friendlinks' => array('friendlinks'),
		'plugins'   => array('plugins'),
		'categorys' => array('categorys'),
		'players'	=> array('players'),
		'servers'	=> array('servers'),
		'settings'	=> array('settings'),
		);

	$updatelist = empty($cachename) ? array_values($cachescript) : (is_array($cachename) ? array('0' => $cachename) : array(array('0' => $cachename)));

	$updated = array();

	foreach($updatelist as $value) {
		foreach($value as $cname) {
			if(empty($updated) || !in_array($cname, $updated)) {
				$updated[] = $cname;
				getcachearray($cname);
			}
		}
	}

	foreach($cachescript as $script => $cachenames) {
		if(empty($cachename) || (!is_array($cachename) && in_array($cachename, $cachenames)) || (is_array($cachename) && array_intersect($cachename, $cachenames))) {
			$cachedata = '';
			$query = $db->query("SELECT data FROM {$tablepre}caches WHERE cachename in(".implodeids($cachenames).")");
			while($data = $db->fetch_array($query)) {
				$cachedata .= $data['data'];
			}
			writetocache($script, $cachenames, $cachedata);
		}
	}

	if(!$cachename || $cachename == 'styles') {
		$stylevars = array();
		$defaultstyleid = $_NCACHE['settings']['styleid'] ? $_NCACHE['settings']['styleid'] : $GLOBALS['styleid'];
		$query = $db->query("SELECT sv.* FROM {$tablepre}stylevars sv LEFT JOIN {$tablepre}styles s ON s.styleid = sv.styleid AND s.styleid='$defaultstyleid'");
		while($var = $db->fetch_array($query)) {
			$stylevars[$var['styleid']][$var['variable']] = $var['substitute'];
		}
		$query = $db->query("SELECT s.*, t.directory AS tpldir FROM {$tablepre}styles s LEFT JOIN {$tablepre}templates t ON s.templateid=t.templateid WHERE s.styleid='$defaultstyleid'");
		while($data = $db->fetch_array($query)) {
			$data = array_merge($data, $stylevars[$data['styleid']]);
			$data['imgdir'] = ROOTDIR.'/'.$data['imgdir'];
			if(strstr($data['imglogo'], ',')) {
				$flash = explode(",", $data['imglogo']);
				$flash[0] = trim($flash[0]);
				$flash[0] = preg_match('/^http:\/\//i', $flash[0]) ? $flash[0] : $data['imgdir'].'/'.$flash[0];
				$data['imglogo'] = "<embed src=\"".$flash[0]."\" width=\"".trim($flash[1])."\" height=\"".trim($flash[2])."\" type=\"application/x-shockwave-flash\"></embed>";
			} else {
				$data['imglogo'] = preg_match('/^http:\/\//i', $data['imglogo']) ? $data['imglogo'] : $data['imgdir'].'/'.$data['imglogo'];
				$site_name = $_NCACHE[settings][sitename];
				$data['imglogo'] = "<img src=\"$data[imglogo]\" alt=\"$site_name\" border=\"0\" />";
			}
			writetocache($data['styleid'], '', getcachevars($data, 'CONST'), 'style_');
			writetocsscache($data);
		}
	}

	if(!$cachename || $cachename == 'config') {
	    $data = "var ROOTDIR = '".ROOTDIR."'";
		writetoconfigcache($data);
	}

	if($cachename == 'files') {
		if($en_movie && $en_movie[mid] > 0){
            $result=$db->query("select mid, fid, name, content, server, player from {$tablepre}files where mid='$en_movie[mid]' order by server DESC, fid ASC");
            while($file=$db->fetch_array($result)){
			    $file['server'] = empty($file['server']) ? 'juedui' : $file['server'];
				$en_file = array(
				    'mid' => $file['mid'],
				    'fid' => $file['fid'],
				    'server' => $file['server'],
                 );
				$file['nm'] = netmao_playcode($en_file);
				$data[$file['server']][$file['fid']] = array_merge($en_movie,$file);
            }
			writetomoviecache($data);
		}
	}

}

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

function arrayeval($array, $level = 0) {
	if(!is_array($array)) {
		return "'".$array."'";
	}
	if(is_array($array) && function_exists('var_export')) {
		return var_export($array, true);
	}

	$space = '';
	for($i = 0; $i <= $level; $i++) {
		$space .= "\t";
	}
	$evaluate = "Array\n$space(\n";
	$comma = $space;
	if(is_array($array)) {
		foreach($array as $key => $val) {
			$key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key;
			$val = !is_array($val) && (!preg_match("/^\-?[1-9]\d*$/", $val) || strlen($val) > 12) ? '\''.addcslashes($val, '\'\\').'\'' : $val;
			if(is_array($val)) {
				$evaluate .= "$comma$key => ".arrayeval($val, $level + 1);
			} else {
				$evaluate .= "$comma$key => $val";
			}
			$comma = ",\n$space";
		}
	}
	$evaluate .= "\n$space)";
	return $evaluate;
}

function getcachearray($cachename, $script = '') {
	global $db, $tablepre, $timestamp;

	$cols = '*';
	$conditions = '';

	switch($cachename) {
        case 'announces':
			$table = 'announces';
			$cols = 'id, name ,content, displayorder';
			$conditions = "order by displayorder asc";
		break;
        case 'friendlinks':
			$table = 'friendlinks';
			$cols = 'id, displayorder, name, url, description,logo';
			$conditions = "order by displayorder asc";
		break;
        case 'plugins':
			$table = 'plugins';
			$cols = 'pluginid, name, content, keyword, displayorder';
			$conditions = 'order by displayorder asc';
		break;	
        case 'categorys':
			$table = 'categorys';
			$cols = 'cid, name, content, keyword, displayorder';
			$conditions = 'order by displayorder asc';
		break;
        case 'players':
			$table = 'players';
			$cols = 'playid, name, identifier, content, displayorder';
			$conditions = 'order by displayorder asc';
		break;
        case 'servers':
			$table = 'servers';
			$cols = 'servid, name, identifier, content, description, displayorder';
			$conditions = 'order by displayorder asc';
		break;
        case 'settings':
			$table = 'settings';
			$cols = 'variable, value';
		break;
	}

	$data = array();

	if(empty($table) || empty($cols)) return '';
	$query = $db->query("SELECT $cols FROM {$tablepre}$table $conditions");

	switch($cachename) {
		case 'announces':
			while($announce = $db->fetch_array($query)) {
				$data[$announce['id']]['id'] = $announce['id'];
				$data[$announce['id']]['name'] = $announce['name'];
				$data[$announce['id']]['content'] = $announce['content'];
				$data[$announce['id']]['displayorder'] = $announce['displayorder'];
			}
		break;
		case 'friendlinks':
			$tightlink_text = $tightlink_logo = '';
			while($flink = $db->fetch_array($query)) {
				if($flink['description']) {
					$friendlink['content'] = "<h5><a href=\"$flink[url]\" target=\"_blank\">$flink[name]</a></h5><p>$flink[description]</p>";
					if($flink['logo']) {
						$friendlink['type'] = 1;
						$friendlink['logo'] = $flink['logo'];
					} else {
						$friendlink['type'] = 2;
					}
					$data[] = $friendlink;
				} else {
					if($flink['logo']) {
						$tightlink_logo .= "<a href=\"$flink[url]\" target=\"_blank\"><img src=\"$flink[logo]\" border=\"0\" alt=\"$flink[name]\" /></a> ";
					} else {
						$tightlink_text .= "<a href=\"$flink[url]\" target=\"_blank\">[$flink[name]]</a> ";
					}
				}
			}
			if($tightlink_logo || $tightlink_text) {
				$tightlink_logo .= $tightlink_logo ? '<br />' : '';
				$data[] = array('type' => 3, 'content' => $tightlink_logo.$tightlink_text);
			}
		break;
		case 'plugins':
			while($plugin = $db->fetch_array($query)) {
				$data[$plugin['pluginid']]['pluginid'] = $plugin['pluginid'];
				$data[$plugin['pluginid']]['name'] = $plugin['name'];
				$data[$plugin['pluginid']]['content'] = $plugin['content'];
				$data[$plugin['pluginid']]['keyword'] = $plugin['keyword'];
				$data[$plugin['pluginid']]['displayorder'] = $plugin['displayorder'];
			}
		break;
		case 'categorys':
			while($category = $db->fetch_array($query)) {
				$data[$category['cid']]['cid'] = $category['cid'];
				$data[$category['cid']]['name'] = $category['name'];
				$data[$category['cid']]['content'] = $category['content'];
				$data[$category['cid']]['keyword'] = $category['keyword'];
				$data[$category['cid']]['displayorder'] = $category['displayorder'];
			}
		break;
		case 'players':
			while($player = $db->fetch_array($query)) {
				$data[$player['identifier']]['playid'] = $player['playid'];
				$data[$player['identifier']]['name'] = $player['name'];
				$data[$player['identifier']]['identifier'] = $player['identifier'];
				$data[$player['identifier']]['content'] = $player['content'];
				$data[$player['identifier']]['displayorder'] = $player['displayorder'];
			}
		break;
		case 'servers':
			while($server = $db->fetch_array($query)) {
				$data[$server['identifier']]['servid'] = $server['servid'];
				$data[$server['identifier']]['name'] = $server['name'];
				$data[$server['identifier']]['description'] = $server['description'];
				$data[$server['identifier']]['identifier'] = $server['identifier'];
				$s = explode("|",trim($server['content']));
				$data[$server['identifier']]['content'] = $s[0];
				$data[$server['identifier']]['player'] = $s[1];
			}
		break;
		case 'settings':
			while($setting = $db->fetch_array($query)) {
			    if(in_array($setting['variable'], array('m_areas', 'm_languages', 'm_actors', 'm_directors', 'm_keywords'))) {
				    $data[$setting['variable']] = explode("|",$setting['value']);
				}elseif(in_array($setting['variable'], array('sitename','sitekey','styleid','spiderfile','uploadsize','uploadext','d_actor','d_director','d_hits','d_picture','d_keyword','d_description','d_content','d_extensions','d_from','d_to','d_file'))) {
				    $data[$setting['variable']] = $setting['value'];
				}
			}
		break;
		default:
			while($datarow = $db->fetch_array($query)) {
				$data[] = $datarow;
			}
		break;
	}

	$dbcachename = $cachename;
	$curdata = "\$_NCACHE['$cachename'] = ".arrayeval($data).";\n\n";
	$db->query("REPLACE INTO {$tablepre}caches (cachename, type, dateline, data) VALUES ('$dbcachename', '1', '$timestamp', '".addslashes($curdata)."')");
	return $curdata;
}

function writetocache($script, $cachenames, $cachedata = '', $prefix = 'cache_') {
	if(is_array($cachenames) && !$cachedata) {
		foreach($cachenames as $name) {
			$cachedata .= getcachearray($name, $script);
		}
	}
	$dir = NetMao_ROOT.'./mdata/cache/';
	if(!is_dir($dir)) {
		@mkdir($dir, 0777);
	}
	if($fp = @fopen("$dir$prefix$script.php", 'wb')) {
		fwrite($fp, "<?php\n//NetMao cache file, DO NOT modify me!".
			"\n//Created: ".date("M j, Y, G:i").
			"\n//Identify: ".md5($prefix.$script.'.php'.$cachedata.NetMao_AuthKey)."\n\n$cachedata?>");
		fclose($fp);
	} else {
		exit('Can not write to cache files, please check directory ./mdata/ and ./mdata/cache/ .');
	}
}

function writetocsscache($data) {
	$csstemplates = array('css');
	$styleid = $data['styleid'];
	include_once NetMao_ROOT.'./mdata/cache/style_'.$styleid.'.php';
	$cachedir = NetMao_ROOT.'./mdata/cache/';
	foreach($csstemplates as $css) {
		$cssfile = template($css, $styleid, $data['tpldir']);
		$cssfile = !file_exists($cssfile) ? template($css, 1, './templates/default/') : $cssfile;
		$fp = fopen($cssfile, 'r');
		$cssdata = fread($fp, filesize($cssfile));
		fclose($fp);
		$cssdata = preg_replace("/<\?=([A-Z0-9]+)\?>/e", '\$data[strtolower(\'\1\')]', $cssdata);
		$cssdata = preg_replace("/<\?.+?\?>\s*/", '', $cssdata);
		$extra = substr($css, 3);
		if(@$fp = fopen($cachedir.'style_'.$styleid.$extra.'.css', 'w')) {
			fwrite($fp, $cssdata);
			fclose($fp);
		} else {
			exit('Can not write to cache files, please check directory ./mdata/ and ./mdata/cache/ .');
		}
	}
}

function writetoconfigcache($data) {
	$dir = NetMao_ROOT.'./';
    $cachedir = NetMao_ROOT.'./mdata/cache/';
	if(@$fp = fopen($cachedir.'config.js', 'w')) {
		fwrite($fp, $data);
		fclose($fp);
	} else {
		exit('Can not write to cache files, please check directory ./mdata/ and ./mdata//cache/ .');
	}
}

function writetomoviecache($data) {
	global $en_movie;
	$dir = NetMao_ROOT.'./';
	$movieurl = movieurl($en_movie[mid]);
	$curdata = "\$_NM['files'] = ".arrayeval($data).";\n\n";
	if($fp = @fopen("$dir$movieurl.php", 'wb')) {
		fwrite($fp, "<?php\n//NetMao cache file, DO NOT modify me!".
			"\n//Created: ".date("M j, Y, G:i").
			"\n//Identify: ".md5($movieurl.'.php'.$curdata.NetMao_AuthKey)."\n\n$curdata?>");
		fclose($fp);
	} else {
		exit('Can not write to cache files, please check directory $movieurl .');
	}
}
?>