www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/include/general.fun.php

    <?
!defined('M_COM') && exit('No Permisson');
include_once M_ROOT.'./include/ios.fun.php';
function un_virtual(&$str){
	if(empty($str)) return;
	$str = str_replace('-','=',str_replace('/','&',$str));
	$str = preg_replace("/\.html$/i",'',$str);
	return;
}
function en_virtual(&$str,$suffix=0){
	global $virtualurl,$rewritephp;
	if(empty($str) || empty($virtualurl)) return;
	$str = str_replace('=','-',str_replace('&','/',$str));
	$suffix && $str .= '.html';
	$rewritephp && $str = str_replace('.php?',$rewritephp,$str);
	return;
}

function blank_content($url=''){
	global $cms_abs;
	return "<html><head><meta http-equiv=\"expires\" content=\"0\"><meta http-equiv=\"refresh\" content=\"0;url=".$cms_abs.$url."\"></head></html>";
}
function read_htmlcac($cacfile){
	return (@include $cacfile) ? $caccnt : '';
}
function save_htmlcac($cnt,$cacfile){
	if(@$fp = fopen($cacfile,'wb')){
		fwrite($fp,"<?php\n\$caccnt = '".addcslashes($cnt,'\'\\')."';\n?>");
		fclose($fp);
	}
}
function cn_topid($id,&$arr){
	if(empty($arr[$id])) return 0;
	return $arr[$id]['pid'] ? cn_topid($arr[$id]['pid'],$arr) : $id;
}
function saveastxt($str,$namepre=''){
	global $archtmlmode,$timestamp;
	if($str == '') return '';
	$dir = M_ROOT.'dynamic/htmltxt/';
	if(!$namepre){
		!is_dir($dir) && mmkdir($dir);
		$sub_dir = date($archtmlmode == 'month' ? 'Ym' : 'Ymd',$timestamp).'/';
		!is_dir($dir.$sub_dir) && mmkdir($dir.$sub_dir);
		$namepre = $sub_dir.substr(md5(microtime()),5,15).random(6,1);
	}
	save_htmlcac($str,$dir.$namepre.'.php');
	return $namepre;
}
function readfromtxt($namepre=''){
	if(!$namepre) return '';
	return read_htmlcac(M_ROOT.'dynamic/htmltxt/'.$namepre.'.php');
}
function txtunlink($namepre=''){
	if(!$namepre) return;
	@unlink(M_ROOT.'dynamic/htmltxt/'.$namepre.'.php');
}
function mmkdir($dir,$create=1){
	$ret = false;
	if(!is_dir($dir)){
		$ret = @mkdir($dir,0777);
		if($create){
			@touch($dir.'/index.htm');
			@touch($dir.'/index.html');
		}
	}
	return $ret;
}
function clear_dir($dir,$self = false){
	if(is_dir($dir)){
		$p = opendir($dir);
		while(false !== ($f = readdir($p))){
			if('.' != $f && '..' != $f) clear_dir("$dir/$f",true);
		}
		closedir($p);
		if($self) rmdir($dir);
	}elseif(is_file($dir)) unlink($dir);
}

function sqlstr_replace($str,&$temparr){
	return preg_replace("/\{\\$(.+?)\}/ies","sqlstrval('\\1',\$temparr)",$str);
}
function sqlstrval($tname,&$temparr){
	global $timestamp;
	$temparr['timestamp'] = $timestamp;
	return isset($temparr[$tname]) ? $temparr[$tname] : '';
}

function btagval($tname,&$sarr){
	global $btags,$debugtag,$timestamp;
	$btags['timestamp'] = $timestamp;
	if(isset($sarr[$tname])){
		return str_tagcode($sarr[$tname]);
	}elseif(isset($btags[$tname])){
		return str_tagcode($btags[$tname]);
	}else return $debugtag ? "{ \$$tname}" : '';
}
function str_tagcode(&$source,$decode=0){
	return $decode ? str_replace(array(' $','? }'),array('$','?}'),$source) : str_replace(array('$','?}'),array(' $','? }'),$source);
}

function mailto($to,$subject,$msg,$sarr=array(),$from = '',$ischeck=0){
	include_once M_ROOT.'./include/mail.fun.php';
	$ret = sys_mail($to,splang($subject,$sarr),splang($msg,$sarr),$from);
	if(!$ischeck && $ret){
		global $curuser,$timestamp;
		$record = mhtmlspecialchars($timestamp."\t".$curuser->infos['mid']."\t".$curuser->infos['mname']."\t".$ret);
		record2file('smtp',$record);
	}
	return $ret;
}
function splang($key,&$sarr){
	global $splangs,$btags;
	load_cache('btags');
	$ret = $key;
	load_cache('splangs');
	if(isset($splangs[$key])) $ret = preg_replace("/\{\\$(.+?)\}/ies","btagval('\\1',\$sarr)",$splangs[$key]);
	return $ret;
}
function field_func(&$sarr,$func=''){
	if(!$func) return '';
	include_once M_ROOT."./dynamic/function/fields.fun.php";
	$func = preg_replace("/\{\\$(.+?)\}/ies","funcval('\\1',\$sarr)",$func);
	$ret = @eval($func);
	return $ret;
}
function funcval($tname,&$sarr){
	return isset($sarr[$tname]) ? $sarr[$tname] : '';
}
function marray_slice($arr,$offset = 0,$length = 0){//只允许正序//保留键值
	$length = empty($length) ? count($arr) : $length;
	if(version_compare(phpversion(), "5.0.2", ">=")){
		return array_slice($arr,$offset,$length,true);
	}else{
		$result = array();
		$i = 0;
		foreach($arr as $k => $v){
			if($length == count($result)) break; 
			if($i >= $offset) $result[$k] = $v;
			$i ++;
		}
		return $result;
	}
}
function updaterecent($aid = 0,$type='clicks',$add = 0){//更新当天的统计记录//只加不减
	global $db,$tblprefix,$timestamp,$monthstats,$weekstats;
	if(!$aid || $add <= 0) return;
	if(empty($monthstats) && empty($weekstats)) return;
	$vardate = date('Ymd',$timestamp);
	if($db->result_one("SELECT COUNT(*) FROM {$tblprefix}arecents WHERE aid='$aid' AND vardate='$vardate'")){
		$db->query("UPDATE {$tblprefix}arecents SET $type=$type + $add WHERE aid='$aid' AND vardate='$vardate'");
	}else $db->query("INSERT INTO {$tblprefix}arecents SET aid='$aid',vardate='$vardate',$type='$add'");
}

function load_tpl($tplname,$rt=1){
	global $rtags,$templatedir,$sid,$subsites;
	$sid && $templatedir = $subsites[$sid]['templatedir'];//子站分别指定模板目录
	$template = @file2str(M_ROOT."template/$templatedir/".$tplname);
	$rt && $template = preg_replace("/\{tpl\\$(.+?)\}/ies", "rtagval('\\1')",$template);
	return $template;
}
function rtagval($tname){
	$rtag = read_tag('rtag',$tname);
	return $rtag ? $rtag['template'] : "{tpl\$$tname}";
}
function self_sqlstr($coid,$ccids,$pre = ''){
	global $cotypes,$timestamp;
	$sqlstr = '';
	if(empty($ccids)) return $sqlstr;
	if(!is_array($ccids)) $ccids = array($ccids);
	$multi = 0;
	foreach($ccids as $ccid){
		$sqlstr1 = '';
		if(!($coclass = read_cache('coclass',$coid,$ccid)) || empty($coclass['conditions'])) continue;
		foreach(array('createdate','clicks','comments','praises','debases','favorites','orders','price','answers','currency',) as $var){
			if(isset($coclass['conditions'][$var.'from'])){
				$sqlstr1 .= ($sqlstr1 ? ' AND ' : '').$pre.$var.">='".$coclass['conditions'][$var.'from']."'";
			}
			if(isset($coclass['conditions'][$var.'to'])){
				$sqlstr1 .= ($sqlstr1 ? ' AND ' : '').$pre.$var."<'".$coclass['conditions'][$var.'to']."'";
			}
		}
		if(isset($coclass['conditions']['indays'])) $sqlstr1 .= ($sqlstr1 ? ' AND ' : '').$pre."createdate>='".($timestamp - 86400 * $coclass['conditions']['indays'])."'";
		if(isset($coclass['conditions']['outdays'])) $sqlstr1 .= ($sqlstr1 ? ' AND ' : '').$pre."createdate<'".($timestamp - 86400 * $coclass['conditions']['outdays'])."'";
		if(isset($coclass['conditions']['closed'])){
			if($coclass['conditions']['closed']){
				$sqlstr1 .= ($sqlstr1 ? ' AND ' : '').'('.$pre.'closed=1 OR '.$pre.'finishdate<'.$timestamp.')';
			}else{
				$sqlstr1 .= ($sqlstr1 ? ' AND ' : '').'('.$pre.'closed=0 AND '.$pre.'finishdate>'.$timestamp.')';
			}
		}
		if(isset($coclass['conditions']['sqlstr'])){
			$coclass['conditions']['sqlstr'] = stripslashes(str_replace('{$pre}',$pre,$coclass['conditions']['sqlstr']));
			$sqlstr1 .= ($sqlstr1 ? ' AND ' : '').'('.$coclass['conditions']['sqlstr'].')';
		}
		($sqlstr1 && $sqlstr) && $multi = 1;
		$sqlstr1 && $sqlstr .= ($sqlstr ? ' OR ' : '').'('.$sqlstr1.')';
	}
	$multi && $sqlstr = '('.$sqlstr.')';
	return $sqlstr;	
}
function farc_active($caid=0){//激活某分类的排队信息
	global $db,$tblprefix,$timestamp;
	if(!$caid) return;
	$fcatalog = read_cache('fcatalog',$caid);
	if(empty($fcatalog['taxcrid']) || empty($fcatalog['maxactive'])) return;
	if($wnums = max(0,$fcatalog['maxactive'] - $db->result_one("SELECT COUNT(*) FROM {$tblprefix}farchives WHERE caid='$caid' AND checked=1 AND startdate>0 AND (enddate=0 OR enddate>'$timestamp')"))){
		$db->query("UPDATE {$tblprefix}farchives SET startdate='$timestamp',enddate=orderdays*86400+$timestamp,orderdays=0
					WHERE checked=1 AND orderdays>0 AND caid=$caid ORDER BY vieworder,aid LIMIT $wnums");
	}
	unset($fcatalog);
	return;
}

function cnodearr($urlstr,$sid=0){
	global $subsites,$cmsinfos;
	include_once M_ROOT."./include/cparse.fun.php";
	if($cnode = read_cache('cnode',$urlstr,'',$sid)){
		view_cnurl($urlstr,$cnode);
		$cnode['sitename'] = empty($cnode['sid']) ? lang('msite') : $subsites[$cnode['sid']]['sitename'];
		$cnode['siteurl'] = view_siteurl($cnode['sid']);
	}
	return $cnode ? $cnode : false;
}
function order_arr(&$arr,$pid){
	$tempids = $oarr = array();
	$tempids = son_ids($arr,$pid,$tempids);
	foreach($tempids as $tempid) {
		$oarr[$tempid] = $arr[$tempid];
	}
	unset($tempids);
	return $oarr;
}
function son_ids(&$arr,$pid,&$ids){
	$narr = $arr;
	foreach($narr as $k => $v){
		if($v['pid'] == $pid){
			$ids[] = $k;
			$ids = son_ids($arr,$k,$ids);
		}
	}
	unset($narr);
	return $ids;
}
function view_url($url){
	global $cms_abs,$ftp_url,$cmsurl;
	if(empty($url) || strpos($url,'://') !== false) return $url;
	$url = preg_replace("/^".regencode($cmsurl)."/i",$cms_abs,$url);
	return strpos($url,'://') !== false ? $url : ($cms_abs.$url);
}
function save_atmurl($url){
	global $cmsurl,$cms_abs,$ftp_url,$dir_userfile;
	$url = preg_replace("/^".regencode($cms_abs)."/i",'',$url);
	$url = preg_replace("/^".regencode($cmsurl)."/i",'',$url);
	if($ftp_url) $url = preg_replace("/^".regencode($ftp_url)."/i",'<!ftpurl />',$url);
	return $url;
}
function html_atm2tag(&$str){//转义后的字串
	global $cmsurl,$ftp_url,$cms_abs;
	$re = regencode($cms_abs).'|'.regencode($cmsurl).'|'.regencode($ftp_url);
	$str = addslashes(preg_replace("/(src\s*=\s*['\"]?)($re)(.+?['\" >])/ies",'"$1".("$2"==$ftp_url?"<!ftpurl />":"<!cmsurl />")."$3"',stripslashes($str)));
}
function tag2atm(&$str,$istext=0){
	global $cms_abs,$ftp_url;
	$str = str_replace('<!cmsurl />',$cms_abs,str_replace('<!ftpurl />',$ftp_url,$str));
	if(!$istext) $str = view_url($str);
	return $str;
}
function view_atmurl($url=''){//在处理端附件绑定域名是不会出现的,所以在处理端不要使用本函数
	global $atm_smallsite,$dir_userfile;
	if(!$url) return '';
	if($atm_smallsite) $url = preg_replace("/^".regencode($dir_userfile.'/')."/i",$atm_smallsite,$url);
	return tag2atm($url);
}
function view_thumburl($url){//数据库中保存的数据库格式
	if(strpos($url,'<!ftpurl />') === 0){
		$url .= '.s.jpg';
	}elseif((strpos($url,'://') === false) && is_file(local_file($url.'.s.jpg'))) $url .= '.s.jpg';
	return view_atmurl($url);
}

function view_farcurl($id,$url=''){//不需区分子站//$s:0为附属信息内容页,1为自定义独立页
	global $virtualurl,$infohtmldir;
	if(!$url){
		$url = "freeinfo.php?aid=$id";
		en_virtual($url,1);
	}else $url = $infohtmldir.'/'.$url;
	return view_url($url);
}
function view_siteurl($sid=0){//子站域名如果解释???
	global $enablestatic,$subsites,$cms_abs;
	if(!$sid) return $cms_abs;
	if(!$enablestatic){
		$url = "index.php?sid=$sid";
		en_virtual($url,1);
	}else $url = empty($subsites[$sid]['smallsite']) ? $subsites[$sid]['dirname'].'/' : $subsites[$sid]['smallsite'];
	return view_url($url);
}
function view_arcurl(&$archive){//处理栏目及子站绑定域名(后带/)
	global $cnhtmldir,$enablestatic,$subsites;//已经不存在文档保存目录了
	if(empty($enablestatic)){
		$arcurl = "archive.php?aid=$archive[aid]";
		en_virtual($arcurl,1);
	}else{
		$nsid = $archive['sid'];
		$catalogs = read_cache('catalogs','','',$nsid);
		$topid = cn_topid($archive['caid'],$catalogs);
		$catalog = read_cache('catalog',$topid,'',$nsid);
		if($catalog['smallsite']){//栏目绑定域名
			$arcurl = $catalog['smallsite'].$archive['arcurl'];
		}elseif($nsid && $subsites[$nsid]['smallsite']){//子站绑定域名
			$arcurl = $subsites[$nsid]['smallsite'].$catalogs[$topid]['dirname'].'/'.$archive['arcurl'];
		}else $arcurl = ($nsid ? $subsites[$nsid]['dirname'] : $cnhtmldir).'/'.$catalogs[$topid]['dirname'].'/'.$archive['arcurl'];//不绑定域名或非子站内容
		unset($nsid,$catalogs,$catalog);
	}
	return view_url($arcurl);
}
function view_cnurl(&$cnstr,&$cnode){//为空url赋值、虚拟静态、二级哉名(后带/)
	global $enablestatic,$cnhtmldir,$subsites;
	if(empty($cnode)) return;
	if($cnode['appurl']){
		$cnode['indexurl'] = $cnode['listurl'] = $cnode['bkurl'] = $cnode['appurl'];
	}else{
		parse_str($cnstr,$idsarr);
		//需要得到所在频道类系的顶层分类
		$items = $cnode['mainline'] == 'ca' ? read_cache('catalogs','','',$cnode['sid']) : read_cache('coclasses',$cnode['mainline'],$idsarr['ccid'.$cnode['mainline']]);
		$topid = cn_topid($cnode['mainline'] == 'ca' ? $idsarr['caid'] : $idsarr['ccid'.$cnode['mainline']],$items);
		$item = $cnode['mainline'] == 'ca' ? read_cache('catalog',$topid,'',$cnode['sid']) : read_cache('coclass',$cnode['mainline'],$topid);
		$nhtmldir = cn_htmldir($cnstr,$cnode['sid']);
		foreach(array('index','list','bk') as $var){
			if(!$enablestatic){
				$cnode[$var.'url'] = ($var == 'bk' ? 'list.php?bk=1&' : ($var.'.php?')).$cnstr.(empty($cnode['sid']) ? '' : ('&sid='.$cnode['sid']));
				en_virtual($cnode[$var.'url'],1);
			}else{
				$cnode[$var.'url'] = $nhtmldir.($var == 'index' ? '' : ($var == 'list' ? '1.html' : 'bk_1.html'));
				$subsite = $cnode['sid'] ? $subsites[$cnode['sid']] : array();
				if($item['smallsite']){
					$dirstr = (empty($cnode['sid']) ? $cnhtmldir : $subsite['dirname']).'/'.$item['dirname'];
					$cnode[$var.'url'] = preg_replace("/^".regencode($dirstr.'/')."/i",$item['smallsite'],$cnode[$var.'url']);
				}elseif(!empty($subsite['smallsite'])) $cnode[$var.'url'] = preg_replace("/^".regencode($subsite['dirname'].'/')."/i",$subsite['smallsite'],$cnode[$var.'url']);
			}
			$cnode[$var.'url'] = view_url($cnode[$var.'url']);
		}
		unset($items,$item,$idsarr,$subsite,$dirstr);
	}
}

function m_unlink($file='',$num=50){//完整目录的文件//删除序列性文件//??????????????????????????????????????????????
	if(!$file) return;
	$ext = mextension($file);
	if($ext = mextension($file)){
		$file_pre = substr($file,0,strlen($file) - strlen($ext) - 2);
		for($i = 1;$i <= $num;$i++){
			if(!is_file($file_pre.$i.'.'.$ext)) break;
			@unlink($file_pre.$i.'.'.$ext);
		}
	}
}
function local_file($url){
	global $cmsurl,$cms_abs;
	if(islocal($url)){
		$url = M_ROOT.preg_replace("/^".regencode($cmsurl)."/i",'',preg_replace("/^".regencode($cms_abs)."/i",'',$url));
	}
	return $url;
}
function islocal($url,$isatm=0){
	global $cms_abs,$ftp_url,$atm_smallsite;
	if(strpos($url,'://') === false) return true;
	if(preg_match("/^".regencode($cms_abs)."/i",$url)) return true;
	if($isatm){
		if(preg_match("/^".regencode($ftp_url)."/i",$url)) return true;
		if(preg_match("/^".regencode($atm_smallsite)."/i",$url)) return true;
	}
	return false;
}

function regencode($str){
	$search  = array("\\",'"',".","[", "]","(", ")","?","+","*","^","{","}","$","|","/","\(\*\)");
	$replace = array("\\\\",'\"',"\.","\[","\]","\(","\)","\?","\+","\*","\^","\{","\}","\$","\|","\/","[\s\S]*?");
	return str_replace($search,$replace,$str);
}
function in_str($me,$source){
	return !(strpos($source,$me) === FALSE);
}
function loaduclasses($mid){
	global $db,$tblprefix;
	$uclasses = array();
	if(empty($mid)) return $uclasses;
	$query = $db->query("SELECT * FROM {$tblprefix}uclasses WHERE mid='$mid' ORDER BY vieworder");
	while($uclass = $db->fetch_array($query)){
		$uclasses[$uclass['ucid']] = $uclass['cname'];
	}
	return $uclasses;
}
function load_mstpls($mid=0){
	global $db,$tblprefix,$mtconfigs;
	$mstpls = array();
	if(!$mid) return $mstpls;
	$mtcid = $db->result_one("SELECT mtcid FROM {$tblprefix}members WHERE mid='$mid'");
	$mtcid = empty($mtcid) ? 1 : $mtcid;
	if(empty($mtconfigs[$mtcid])) return $mstpls;
	$mstpls = $mtconfigs[$mtcid]['setting'];
	return $mstpls;
}
function file_down($file, $filename = ''){
	global $timestamp;
	if(!file_exists($file)) return;
	$filename = $filename ? $filename : basename($file);
	$filetype = mextension($filename);
	$filesize = filesize($file);
    ob_end_clean();
	@set_time_limit(900);
	header('Cache-control: max-age=31536000');
	header('Expires: '.gmdate('D, d M Y H:i:s', $timestamp + 31536000).' GMT');
	header('Content-Encoding: none');
	header('Content-Length: '.$filesize);
	header('Content-Disposition: attachment; filename='.$filename);
	header('Content-Type: '.$filetype);
	readfile($file);
	exit;
}
function js_write(&$content){
	echo "document.write('".str_replace(array("\n","\r"),' ',addslashes($content))."');";
}

function record2file($rname,$record){
	global $timestamp;
	$recorddir = M_ROOT.'./dynamic/records/';
	$recordfile_pre = $recorddir.date('Ym',$timestamp).'_'.$rname;
	$recordfile = $recordfile_pre.'.php';
	if(@filesize($recordfile) > 1024*1024){
		$dir = opendir($recorddir);
		$length = strlen($rname);
		$maxid = $id = 0;
		while($file = readdir($dir)){
			if(in_str($recordfile_pre,$file)){
				$id = intval(substr($file,$length +8,-4));
				($id > $maxid) && ($maxid = $id);
			}
		}
		closedir($dir);
		$recordfilebk = $recordfile_pre.'_'.($maxid +1).'.php';
		@rename($recordfile,$recordfilebk);
	}
	if($fp = @fopen($recordfile, 'a')){
		@flock($fp, 2);
		$record = is_array($record) ? $record : array($record);
		foreach($record as $tmp) {
			fwrite($fp, "<?PHP exit;?>\t".str_replace(array('<?', '?>'), '', $tmp)."\n");
		}
		fclose($fp);
	}
}

function findfiles($absdir,$str='',$inc=0){//$inc 0按扩展名查询,1按包含字串查询
	$tempfiles = array();
	if(is_dir($absdir)){
		if($tempdir = opendir($absdir)){
			while(($tempfile = readdir($tempdir)) !== false){
				if(filetype($absdir."/".$tempfile) == 'file'){
					if(!$str){
						$tempfiles[] = $tempfile;
					}elseif(!$inc && mextension($tempfile) == $str){
						$tempfiles[] = $tempfile;
					}elseif($inc && in_str($str,$tempfile)){
						$tempfiles[] = $tempfile;
					}
				}
			}
			closedir($tempdir);
		}
	}
	return $tempfiles;
}
function keywords($nstr,$ostr=''){
	global $hotkeywords,$db,$tblprefix;
	if(empty($nstr)) return '';
	$nstr = str_replace(array(chr(0xa1).chr(0xa1), chr(0xa1).chr(0x40), chr(0xe3).chr(0x80).chr(0x80)), ' ', $nstr);
	$narr = array_unique(explode(' ',$nstr));
	$oarr = $ostr ? explode(' ',addslashes($ostr)) : array();
	$i = 0;
	$ret = $sqlstr = '';
	foreach($narr as $str){
		$str = strip_tags(trim($str));
		if(preg_match('/^([\x7f-\xff_-]|\w){3,20}$/',$str)){
			$ret .= ($ret ? ' ' : '').$str;
			($hotkeywords && !in_array($str,$oarr)) && $sqlstr .= ($sqlstr ? ',' : '')."('$str')";
		}
		$i ++;
		if($i > 4){
			unset($narr,$oarr);
			break;
		}
	}
	$sqlstr && $db->query("INSERT INTO {$tblprefix}keywords (keyword) VALUES $sqlstr");
	return $ret;
}


function mnl2br($string){
	return nl2br(str_replace(array("\t", '   ', '  '), array('&nbsp; &nbsp; &nbsp; &nbsp; ', '&nbsp; &nbsp;', '&nbsp;&nbsp;'),$string));
}
function br2nl($string){
	return str_replace("<br />", '',$string);
}
function safestr($string){
	$searcharr = array("/(javascript|jscript|js|vbscript|vbs|about):/i","/on(mouse|exit|error|click|dblclick|key|load|unload|change|move|submit|reset|cut|copy|select|start|stop)/i","/<script([^>]*)>/i","/<iframe([^>]*)>/i","/<frame([^>]*)>/i","/<link([^>]*)>/i","/@import/i");
	$replacearr = array("\\1\n:","on\n\\1","&lt;script\\1&gt;","&lt;iframe\\1&gt;","&lt;frame\\1&gt;","&lt;link\\1&gt;","@\nimport");
	$string = preg_replace($searcharr,$replacearr,$string);
	$string = str_replace("&#","&\n#",$string);
	return $string;
}
function file2str($filename){
	if(!@$fp = fopen($filename, 'r')) return false;
	$str = fread($fp, filesize($filename));
	fclose($fp);
	return $str;
}
function str2file($result,$filename){
	if(!@$fp = fopen($filename, 'w')) return false;
	flock($fp, 2);
	fwrite($fp, $result);
	fclose($fp);
	return true;
}
function regcode_pass($rname,$code=''){
	global $m_cookie,$timestamp,$cms_regcode;
	if(!$cms_regcode || !in_array($rname,explode(',',$cms_regcode))) return true;
	list($inittime, $initcode) = maddslashes(explode("\t", @authcode($m_cookie['08cms_regcode'],'DECODE')),1);
	if(($timestamp - $inittime) > 1800 || $initcode != $code){
		return false;
	}
	return true;
}

function authcode($string, $operation, $key = '') {
	global $authorization;
	$key = md5($key ? $key : $authorization);
	$key_length = strlen($key);

	$string = $operation == 'DECODE' ? base64_decode($string) : substr(md5($string.$key), 0, 8).$string;
	$string_length = strlen($string);

	$rndkey = $box = array();
	$result = '';

	for($i = 0; $i <= 255; $i++) {
		$rndkey[$i] = ord($key[$i % $key_length]);
		$box[$i] = $i;
	}

	for($j = $i = 0; $i < 256; $i++) {
		$j = ($j + $box[$i] + $rndkey[$i]) % 256;
		$tmp = $box[$i];
		$box[$i] = $box[$j];
		$box[$j] = $tmp;
	}

	for($a = $j = $i = 0; $i < $string_length; $i++) {
		$a = ($a + 1) % 256;
		$j = ($j + $box[$a]) % 256;
		$tmp = $box[$a];
		$box[$a] = $box[$j];
		$box[$j] = $tmp;
		$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
	}

	if($operation == 'DECODE') {
		if(substr($result, 0, 8) == substr(md5(substr($result, 8).$key), 0, 8)) {
			return substr($result, 8);
		} else {
			return '';
		}
	} else {
		return str_replace('=', '', base64_encode($result));
	}

}

function is_robots(){
	global $_SERVER;
	if(!defined('IS_ROBOT')) {
		$kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
		$kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';
		if(preg_match("/($kw_browsers)/", $_SERVER['HTTP_USER_AGENT'])){
			define('IS_ROBOT', FALSE);
		}elseif(preg_match("/($kw_spiders)/", $_SERVER['HTTP_USER_AGENT'])){
			define('IS_ROBOT', TRUE);
		}else{
			define('IS_ROBOT', FALSE);
		}
	}
	return IS_ROBOT;
}
function mheader($string,$replace = true,$http_response_code = 0){
	$string = str_replace(array("\r","\n"),'',$string);
	if(empty($http_response_code) || PHP_VERSION < '4.3'){
		@header($string,$replace);
	}else{
		@header($string,$replace,$http_response_code);
	}
	if(preg_match('/^\s*location:/is',$string)){
		exit();
	}
}

function maddslashes($string, $force = 0) {
	!defined('QUOTES_GPC') && define('QUOTES_GPC', get_magic_quotes_gpc());
	if(!QUOTES_GPC || $force) {
		if(is_array($string)) {
			foreach($string as $key => $val) {
				$string[$key] = maddslashes($val, $force);
			}
		} else {
			$string = addslashes($string);
		}
	}
	return $string;
}
function mstripslashes($string){
	if(is_array($string)) {
		foreach($string as $key => $val){
			$string[$key] = mstripslashes($val);
		}
	} else {
		$string = stripslashes($string);
	}
	return $string;
}
function mis_uploaded_file($file){
	return function_exists('is_uploaded_file') && (is_uploaded_file($file) || is_uploaded_file(str_replace('\\\\', '\\', $file)));
}

function mimplode($arr){
	return empty($arr) ? '' : "'".implode("','", is_array($arr) ? $arr : array($arr))."'";
}


function mexit($message = ''){
	echo $message;
	output();
	exit();
}

function output(){
	global $gzipenable;
	$content = ob_get_contents();
	ob_end_clean();
	$gzipenable ? ob_start('ob_gzhandler') : ob_start();
	echo $content;
}

function submitcheck($var, $allowget = 0){
	return empty($GLOBALS[$var]) ? false : true;
}
function mclearcookie($ckname='userauth'){
	if($ckname == 'userauth'){
		global $memberid,$memberpwd,$curuser;
		msetcookie('userauth','',-86400 * 365);
		$memberid = 0;
		$memberpwd = '';
		unset($curuser);
	}else msetcookie($ckname,'',-86400 * 365);
}

function msetcookie($ckname, $ckvalue, $cklife = 0) {
	global $ckpre, $ckdomain, $ckpath, $timestamp, $_SERVER;
	setcookie($ckpre.$ckname, $ckvalue, $cklife ? $timestamp + $cklife : 0, $ckpath, $ckdomain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);
}

function mhtmlspecialchars($string) {
	if(is_array($string)) {
		foreach($string as $key => $val) {
			$string[$key] = mhtmlspecialchars($val);
		}
	} else {
		$string = preg_replace('/&amp;((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1',
		str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $string));
	}
	return $string;
}

function mextension($filename) {
	return trim(substr(strrchr($filename, '.'), 1, 10));
}

function misuploadedfile($file) {
	return function_exists('is_uploaded_file') && (is_uploaded_file($file) || is_uploaded_file(str_replace('\\\\', '\\', $file)));
}

function ipaccess($ip, $accesslist) {
	return preg_match("/^(".str_replace(array("\r\n", ' '), array('|', ''), preg_quote($accesslist, '/')).")/", $ip);
}

function random($length, $onlynum = 0) {
	PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000);
	if($onlynum) {
		$result = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1));
	} else {
		$result = '';
		$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
		$max = strlen($chars) - 1;
		for($i = 0; $i < $length; $i++) {
			$result .= $chars[mt_rand(0, $max)];
		}
	}
	return $result;
}
function isemail($email){
	return strlen($email) > 6 && preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);
}
function isdate($date) {
	if(empty($date)) return FALSE;
	if(strlen($date) > 10)  return FALSE;
	if(!preg_match('/^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/',$date)) return FALSE;
	list($year, $month, $day) = explode('-', $date);
	return @checkdate($month, $day, $year);
}

function cutstr($string, $length, $dot = ' ...') {
	global $mcharset;
	if(strlen($string) <= $length) {
		return $string;
	}
	$string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array('&', '"', '<', '>'), $string);
	$strcut = '';
	if(strtolower($mcharset) == 'utf-8') {
		$n = $tn = $noc = 0;
		while($n < strlen($string)) {
			$t = ord($string[$n]);
			if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
				$tn = 1; $n++; $noc++;
			} elseif(194 <= $t && $t <= 223) {
				$tn = 2; $n += 2; $noc += 2;
			} elseif(224 <= $t && $t < 239) {
				$tn = 3; $n += 3; $noc += 2;
			} elseif(240 <= $t && $t <= 247) {
				$tn = 4; $n += 4; $noc += 2;
			} elseif(248 <= $t && $t <= 251) {
				$tn = 5; $n += 5; $noc += 2;
			} elseif($t == 252 || $t == 253) {
				$tn = 6; $n += 6; $noc += 2;
			} else {
				$n++;
			}
			if($noc >= $length) {
				break;
			}
		}
		if($noc > $length) {
			$n -= $tn;
		}
		$strcut = substr($string, 0, $n);
	} else {
		for($i = 0; $i < $length - strlen($dot) - 1; $i++) {
			$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
		}
	}
	$strcut = str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $strcut);
	return $strcut.$dot;
}
?>