PHP数据的提交与过滤基本操作实例详解
本文实例讲述了PHP数据的提交与过滤基本操作。分享给大家供大家参考,具体如下:
1、php提交数据过滤的基本原则
1)提交变量进数据库时,我们必须使用addslashes()进行过滤,像我们的注入问题,一个addslashes()也就搞定了。其实在涉及到变量取值时,intval()函数对字符串的过滤也是个不错的选择。
2)在php.ini中开启magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie里的引号变为斜杠。
magic_quotes_runtime对于进出数据库的数据可以起到格式话的作用。其实,早在以前注入很疯狂时,这个参数就很流行了。
3)在使用系统函数时,必须使用escapeshellarg(),escapeshellcmd()参数去过滤,这样你也就可以放心的使用系统函数。
4)对于跨站,strip_tags(),htmlspecialchars()两个参数都不错,对于用户提交的的带有html和php的标记都将进行转换。比如尖括号"<"就将转化为"<"这样无害的字符。
$new=htmlspecialchars("<ahref='test'>Test</a>",ENT_QUOTES); strip_tags($text,);
5)对于相关函数的过滤,就像先前的include(),unlink,fopen()等等,只要你把你所要执行操作的变量指定好或者对相关字符过滤严密,我想
这样也就无懈可击了。
2、PHP简单的数据过滤
1)入库: trim($str),addslashes($str)
2)出库: stripslashes($str)
3)显示: htmlspecialchars(nl2br($str))
<?php /** *global.func.php公共函数库 */ /** *返回经addslashes处理过的字符串或数组 *@param$string需要处理的字符串或数组 *@returnmixed */ functionnew_addslashes($string){ if(!is_array($string))returnaddslashes($string); foreach($stringas$key=>$val)$string[$key]=new_addslashes($val); return$string; } /** *返回经stripslashes处理过的字符串或数组 *@param$string需要处理的字符串或数组 *@returnmixed */ functionnew_stripslashes($string){ if(!is_array($string))returnstripslashes($string); foreach($stringas$key=>$val)$string[$key]=new_stripslashes($val); return$string; } /** *返回经htmlspecialchars处理过的字符串或数组 *@param$obj需要处理的字符串或数组 *@returnmixed */ functionnew_html_special_chars($string){ $encoding='utf-8'; if(strtolower(CHARSET)=='gbk')$encoding='ISO-8859-15'; if(!is_array($string))returnhtmlspecialchars($string,ENT_QUOTES,$encoding); foreach($stringas$key=>$val)$string[$key]=new_html_special_chars($val); return$string; } functionnew_html_entity_decode($string){ $encoding='utf-8'; if(strtolower(CHARSET)=='gbk')$encoding='ISO-8859-15'; returnhtml_entity_decode($string,ENT_QUOTES,$encoding); } functionnew_htmlentities($string){ $encoding='utf-8'; if(strtolower(CHARSET)=='gbk')$encoding='ISO-8859-15'; returnhtmlentities($string,ENT_QUOTES,$encoding); } /** *安全过滤函数 * *@param$string *@returnstring */ functionsafe_replace($string){ $string=str_replace('%20','',$string); $string=str_replace('%27','',$string); $string=str_replace('%2527','',$string); $string=str_replace('*','',$string); $string=str_replace('"','"',$string); $string=str_replace("'",'',$string); $string=str_replace('"','',$string); $string=str_replace(';','',$string); $string=str_replace('<','<',$string); $string=str_replace('>','>',$string); $string=str_replace("{",'',$string); $string=str_replace('}','',$string); $string=str_replace('\\','',$string); return$string; } /** *xss过滤函数 * *@param$string *@returnstring */ functionremove_xss($string){ $string=preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S','',$string); $parm1=Array('javascript','vbscript','expression','applet','meta','xml','blink','link','script','embed','object','iframe','frame','frameset','ilayer','layer','bgsound','title','base'); $parm2=Array('onabort','onactivate','onafterprint','onafterupdate','onbeforeactivate','onbeforecopy','onbeforecut','onbeforedeactivate','onbeforeeditfocus','onbeforepaste','onbeforeprint','onbeforeunload','onbeforeupdate','onblur','onbounce','oncellchange','onchange','onclick','oncontextmenu','oncontrolselect','oncopy','oncut','ondataavailable','ondatasetchanged','ondatasetcomplete','ondblclick','ondeactivate','ondrag','ondragend','ondragenter','ondragleave','ondragover','ondragstart','ondrop','onerror','onerrorupdate','onfilterchange','onfinish','onfocus','onfocusin','onfocusout','onhelp','onkeydown','onkeypress','onkeyup','onlayoutcomplete','onload','onlosecapture','onmousedown','onmouseenter','onmouseleave','onmousemove','onmouseout','onmouseover','onmouseup','onmousewheel','onmove','onmoveend','onmovestart','onpaste','onpropertychange','onreadystatechange','onreset','onresize','onresizeend','onresizestart','onrowenter','onrowexit','onrowsdelete','onrowsinserted','onscroll','onselect','onselectionchange','onselectstart','onstart','onstop','onsubmit','onunload'); $parm=array_merge($parm1,$parm2); for($i=0;$i<sizeof($parm);$i++){ $pattern='/'; for($j=0;$j<strlen($parm[$i]);$j++){ if($j>0){ $pattern.='('; $pattern.='(&#[x|X]0([9][a][b]);?)?'; $pattern.='|(�([9][10][13]);?)?'; $pattern.=')?'; } $pattern.=$parm[$i][$j]; } $pattern.='/i'; $string=preg_replace($pattern,'',$string); } return$string; } /** *过滤ASCII码从0-28的控制字符 *@returnString */ functiontrim_unsafe_control_chars($str){ $rule='/['.chr(1).'-'.chr(8).chr(11).'-'.chr(12).chr(14).'-'.chr(31).']*/'; returnstr_replace(chr(0),'',preg_replace($rule,'',$str)); } /** *格式化文本域内容 * *@param$string文本域内容 *@returnstring */ functiontrim_textarea($string){ $string=nl2br(str_replace('',' ',$string)); return$string; } /** *将文本格式成适合js输出的字符串 *@paramstring$string需要处理的字符串 *@paramintval$isjs是否执行字符串格式化,默认为执行 *@returnstring处理后的字符串 */ functionformat_js($string,$isjs=1){ $string=addslashes(str_replace(array("\r","\n","\t"),array('','',''),$string)); return$isjs?'document.write("'.$string.'");':$string; } /** *转义javascript代码标记 * *@param$str *@returnmixed */ functiontrim_script($str){ if(is_array($str)){ foreach($stras$key=>$val){ $str[$key]=trim_script($val); } }else{ $str=preg_replace('/\<([\/]?)script([^\>]*?)\>/si','<\\1script\\2>',$str); $str=preg_replace('/\<([\/]?)iframe([^\>]*?)\>/si','<\\1iframe\\2>',$str); $str=preg_replace('/\<([\/]?)frame([^\>]*?)\>/si','<\\1frame\\2>',$str); $str=str_replace('javascript:','javascript:',$str); } return$str; } /** *获取当前页面完整URL地址 */ functionget_url(){ $sys_protocal=isset($_SERVER['SERVER_PORT'])&&$_SERVER['SERVER_PORT']=='443'?'https://':'http://'; $php_self=$_SERVER['PHP_SELF']?safe_replace($_SERVER['PHP_SELF']):safe_replace($_SERVER['SCRIPT_NAME']); $path_info=isset($_SERVER['PATH_INFO'])?safe_replace($_SERVER['PATH_INFO']):''; $relate_url=isset($_SERVER['REQUEST_URI'])?safe_replace($_SERVER['REQUEST_URI']):$php_self.(isset($_SERVER['QUERY_STRING'])?'?'.safe_replace($_SERVER['QUERY_STRING']):$path_info); return$sys_protocal.(isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:'').$relate_url; } /** *字符截取支持UTF8/GBK *@param$string *@param$length *@param$dot */ functionstr_cut($string,$length,$dot='...'){ $strlen=strlen($string); if($strlen<=$length)return$string; $string=str_replace(array('',' ','&','"',''','“','”','—','<','>','·','…'),array('∵','','&','"',"'",'“','”','—','<','>','·','…'),$string); $strcut=''; if(strtolower(CHARSET)=='utf-8'){ $length=intval($length-strlen($dot)-$length/3); $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); $strcut=str_replace(array('∵','&','"',"'",'“','”','—','<','>','·','…'),array('','&','"',''','“','”','—','<','>','·','…'),$strcut); }else{ $dotlen=strlen($dot); $maxi=$length-$dotlen-1; $current_str=''; $search_arr=array('&','','"',"'",'“','”','—','<','>','·','…','∵'); $replace_arr=array('&',' ','"',''','“','”','—','<','>','·','…',''); $search_flip=array_flip($search_arr); for($i=0;$i<$maxi;$i++){ $current_str=ord($string[$i])>127?$string[$i].$string[++$i]:$string[$i]; if(in_array($current_str,$search_arr)){ $key=$search_flip[$current_str]; $current_str=str_replace($search_arr[$key],$replace_arr[$key],$current_str); } $strcut.=$current_str; } } return$strcut.$dot; } /** *获取请求ip * *@returnip地址 */ functionip(){ if(getenv('HTTP_CLIENT_IP')&&strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown')){ $ip=getenv('HTTP_CLIENT_IP'); }elseif(getenv('HTTP_X_FORWARDED_FOR')&&strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown')){ $ip=getenv('HTTP_X_FORWARDED_FOR'); }elseif(getenv('REMOTE_ADDR')&&strcasecmp(getenv('REMOTE_ADDR'),'unknown')){ $ip=getenv('REMOTE_ADDR'); }elseif(isset($_SERVER['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')){ $ip=$_SERVER['REMOTE_ADDR']; } returnpreg_match('/[\d\.]{7,15}/',$ip,$matches)?$matches[0]:''; } functionget_cost_time(){ $microtime=microtime(TRUE); return$microtime-SYS_START_TIME; } /** *程序执行时间 * *@returnint单位ms */ functionexecute_time(){ $stime=explode('',SYS_START_TIME); $etime=explode('',microtime()); returnnumber_format(($etime[1]+$etime[0]-$stime[1]-$stime[0]),6); } /** *将字符串转换为数组 * *@paramstring$data字符串 *@returnarray返回数组格式,如果,data为空,则返回空数组 */ functionstring2array($data){ if($data=='')returnarray(); $data=stripslashes($data); @eval("\$array=$data;"); return$array; } /** *将数组转换为字符串 * *@paramarray$data数组 *@parambool$isformdata如果为0,则不使用new_stripslashes处理,可选参数,默认为1 *@returnstring返回字符串,如果,data为空,则返回空 */ functionarray2string($data,$isformdata=1){ if($data=='')return''; if($isformdata)$data=new_stripslashes($data); returnaddslashes(var_export($data,TRUE)); } /** *转换字节数为其他单位 * * *@paramstring$filesize字节大小 *@returnstring返回大小 */ functionsizecount($filesize){ if($filesize>=1073741824){ $filesize=round($filesize/1073741824*100)/100.'GB'; }elseif($filesize>=1048576){ $filesize=round($filesize/1048576*100)/100.'MB'; }elseif($filesize>=1024){ $filesize=round($filesize/1024*100)/100.'KB'; }else{ $filesize=$filesize.'Bytes'; } return$filesize; } /** *字符串加密、解密函数 * * *@paramstring$txt字符串 *@paramstring$operationENCODE为加密,DECODE为解密,可选参数,默认为ENCODE, *@paramstring$key密钥:数字、字母、下划线 *@paramstring$expiry过期时间 *@returnstring */ functionsys_auth($string,$operation='ENCODE',$key='',$expiry=0){ $key_length=4; $key=md5($key!=''?$key:app_base::load_config('system','auth_key')); $fixedkey=md5($key); $egiskeys=md5(substr($fixedkey,16,16)); $runtokey=$key_length?($operation=='ENCODE'?substr(md5(microtime(true)),-$key_length):substr($string,0,$key_length)):''; $keys=md5(substr($runtokey,0,16).substr($fixedkey,0,16).substr($runtokey,16).substr($fixedkey,16)); $string=$operation=='ENCODE'?sprintf('%010d',$expiry?$expiry+time():0).substr(md5($string.$egiskeys),0,16).$string:base64_decode(substr($string,$key_length)); $i=0;$result=''; $string_length=strlen($string); for($i=0;$i<$string_length;$i++){ $result.=chr(ord($string{$i})^ord($keys{$i%32})); } if($operation=='ENCODE'){ return$runtokey.str_replace('=','',base64_encode($result)); }else{ if((substr($result,0,10)==0||substr($result,0,10)-time()>0)&&substr($result,10,16)==substr(md5(substr($result,26).$egiskeys),0,16)){ returnsubstr($result,26); }else{ return''; } } } /** *语言文件处理 * *@paramstring$language标示符 *@paramarray$pars转义的数组,二维数组,'key1'=>'value1','key2'=>'value2', *@paramstring$modules多个模块之间用半角逗号隔开,如:member,guestbook *@returnstring语言字符 */ functionL($language='no_language',$pars=array(),$modules=''){ static$LANG=array(); static$LANG_MODULES=array(); static$lang=''; if(defined('IN_ADMIN')){ $lang=SYS_STYLE?SYS_STYLE:'zh-cn'; }else{ $lang=app_base::load_config('system','lang'); } if(!$LANG){ require_onceCODE_PATH.'languages'.DIRECTORY_SEPARATOR.$lang.DIRECTORY_SEPARATOR.'system.lang.php'; if(defined('IN_ADMIN'))require_onceCODE_PATH.'languages'.DIRECTORY_SEPARATOR.$lang.DIRECTORY_SEPARATOR.'system_menu.lang.php'; if(file_exists(CODE_PATH.'languages'.DIRECTORY_SEPARATOR.$lang.DIRECTORY_SEPARATOR.ROUTE_M.'.lang.php'))require_onceCODE_PATH.'languages'.DIRECTORY_SEPARATOR.$lang.DIRECTORY_SEPARATOR.ROUTE_M.'.lang.php'; } if(!empty($modules)){ $modules=explode(',',$modules); foreach($modulesAS$m){ if(!isset($LANG_MODULES[$m]))require_onceCODE_PATH.'languages'.DIRECTORY_SEPARATOR.$lang.DIRECTORY_SEPARATOR.$m.'.lang.php'; } } if(!array_key_exists($language,$LANG)){ return$language; }else{ $language=$LANG[$language]; if($pars){ foreach($parsAS$_k=>$_v){ $language=str_replace('{'.$_k.'}',$_v,$language); } } return$language; } } /** *模板调用 * *@param$module *@param$template *@param$istag *@returnunknown_type */ functiontemplate($module='content',$template='index',$style=''){ if(strpos($module,'plugin/')!==false){ $plugin=str_replace('plugin/','',$module); returnp_template($plugin,$template,$style); } $module=str_replace('/',DIRECTORY_SEPARATOR,$module); if(!empty($style)&&preg_match('/([a-z0-9\-_]+)/is',$style)){ }elseif(empty($style)&&!defined('STYLE')){ if(defined('SITEID')){ $siteid=SITEID; }else{ $siteid=param::get_cookie('siteid'); } if(!$siteid)$siteid=1; $sitelist=getcache('sitelist','commons'); if(!empty($siteid)){ $style=$sitelist[$siteid]['default_style']; } }elseif(empty($style)&&defined('STYLE')){ $style=STYLE; }else{ $style='default'; } if(!$style)$style='default'; $template_cache=app_base::load_sys_class('template_cache'); $compiledtplfile=ROOT_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_template'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.php'; if(file_exists(CODE_PATH.'templates'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html')){ if(!file_exists($compiledtplfile)||(@filemtime(CODE_PATH.'templates'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html')>@filemtime($compiledtplfile))){ $template_cache->template_compile($module,$template,$style); } }else{ $compiledtplfile=ROOT_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_template'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.php'; if(!file_exists($compiledtplfile)||(file_exists(CODE_PATH.'templates'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html')&&filemtime(CODE_PATH.'templates'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html')>filemtime($compiledtplfile))){ $template_cache->template_compile($module,$template,'default'); }elseif(!file_exists(CODE_PATH.'templates'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html')){ showmessage('Templatedoesnotexist.'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html'); } } return$compiledtplfile; } /** *输出自定义错误 * *@param$errno错误号 *@param$errstr错误描述 *@param$errfile报错文件地址 *@param$errline错误行号 *@returnstring错误提示 */ functionmy_error_handler($errno,$errstr,$errfile,$errline){ if($errno==8)return''; $errfile=str_replace(ROOT_PATH,'',$errfile); if(app_base::load_config('system','errorlog')){ error_log('<?phpexit;?>'.date('m-dH:i:s',SYS_TIME).'|'.$errno.'|'.str_pad($errstr,30).'|'.$errfile.'|'.$errline."\r\n",3,CACHE_PATH.'error_log.php'); }else{ $str='<divstyle="font-size:12px;text-align:left;border-bottom:1pxsolid#9cc9e0;border-right:1pxsolid#9cc9e0;padding:1px4px;color:#000000;font-family:Arial,Helvetica,sans-serif;"><span>errorno:'.$errno.',str:'.$errstr.',file:<fontcolor="blue">'.$errfile.'</font>,line'.$errline.'<br/>NeedHelp?</span></div>'; echo$str; } } /** *提示信息页面跳转,跳转地址如果传入数组,页面会提示多个地址供用户选择,默认跳转地址为数组的第一个值,时间为5秒。 *showmessage('登录成功',array('默认跳转地址'=>'http://www.baidu.com')); *@paramstring$msg提示信息 *@parammixed(string/array)$url_forward跳转地址 *@paramint$ms跳转等待时间 */ functionshowmessage($msg,$url_forward='goback',$ms=1250,$dialog='',$returnjs=''){ if(defined('IN_ADMIN')){ include(admin::admin_tpl('showmessage','admin')); }else{ include(template('content','message')); } exit; } /** *查询字符是否存在于某字符串 * *@param$haystack字符串 *@param$needle要查找的字符 *@returnbool */ functionstr_exists($haystack,$needle) { return!(strpos($haystack,$needle)===FALSE); } /** *取得文件扩展 * *@param$filename文件名 *@return扩展名 */ functionfileext($filename){ returnstrtolower(trim(substr(strrchr($filename,'.'),1,10))); } /** *加载模板标签缓存 *@paramstring$name缓存名 *@paraminteger$times缓存时间 */ functiontpl_cache($name,$times=0){ $filepath='tpl_data'; $info=getcacheinfo($name,$filepath); if(SYS_TIME-$info['filemtime']>=$times){ returnfalse; }else{ returngetcache($name,$filepath); } } /** *写入缓存,默认为文件缓存,不加载缓存配置。 *@param$name缓存名称 *@param$data缓存数据 *@param$filepath数据路径(模块名称)caches/cache_$filepath/ *@param$type缓存类型[file,memcache,apc] *@param$config配置名称 *@param$timeout过期时间 */ functionsetcache($name,$data,$filepath='',$type='file',$cAND',$in_column=false){ if($in_column&&is_array($data)){ $ids='\''.implode('\',\'',$data).'\''; $sql="$in_columnIN($ids)"; return$sql; }else{ if($front==''){ $front='AND'; } if(is_array($data)&&count($data)>0){ $sql=''; foreach($dataas$key=>$val){ $sql.=$sql?"$front$key='$val'":"$key='$val'"; } return$sql; }else{ return$data; } } } /** *分页函数 * *@param$num信息总数 *@param$curr_page当前分页 *@param$perpage每页显示数 *@param$urlruleURL规则 *@param$array需要传递的数组,用于增加额外的方法 *@return分页 */ functionpages($num,$curr_page,$perpage=20,$urlrule='',$array=array(),$setpages=10){ if(defined('URLRULE')&&$urlrule==''){ $urlrule=URLRULE; $array=$GLOBALS['URL_ARRAY']; }elseif($urlrule==''){ $urlrule=url_par('page={$page}'); } $multipage=''; if($num>$perpage){ $page=$setpages+1; $offset=ceil($setpages/2-1); $pages=ceil($num/$perpage); if(defined('IN_ADMIN')&&!defined('PAGES'))define('PAGES',$pages); $from=$curr_page-$offset; $to=$curr_page+$offset; $more=0; if($page>=$pages){ $from=2; $to=$pages-1; }else{ if($from<=1){ $to=$page-1; $from=2; }elseif($to>=$pages){ $from=$pages-($page-2); $to=$pages-1; } $more=1; } //$multipage.='<aclass="a1">'.$num.L('page_item').'</a>'; if($curr_page>0){ $multipage.='<ahref="'.pageurl($urlrule,$curr_page-1,$array).'"class="a1">'.L('previous').'</a>'; if($curr_page==1){ $multipage.='<span>1</span>'; }elseif($curr_page>6&&$more){ $multipage.='<ahref="'.pageurl($urlrule,1,$array).'">1</a>..'; }else{ $multipage.='<ahref="'.pageurl($urlrule,1,$array).'">1</a>'; } } for($i=$from;$i<=$to;$i++){ if($i!=$curr_page){ $multipage.='<ahref="'.pageurl($urlrule,$i,$array).'">'.$i.'</a>'; }else{ $multipage.='<span>'.$i.'</span>'; } } if($curr_page<$pages){ if($curr_page<$pages-5&&$more){ $multipage.='..<ahref="'.pageurl($urlrule,$pages,$array).'">'.$pages.'</a><ahref="'.pageurl($urlrule,$curr_page+1,$array).'"class="a1">'.L('next').'</a>'; }else{ $multipage.='<ahref="'.pageurl($urlrule,$pages,$array).'">'.$pages.'</a><ahref="'.pageurl($urlrule,$curr_page+1,$array).'"class="a1">'.L('next').'</a>'; } }elseif($curr_page==$pages){ $multipage.='<span>'.$pages.'</span><ahref="'.pageurl($urlrule,$curr_page,$array).'"class="a1">'.L('next').'</a>'; }else{ $multipage.='<ahref="'.pageurl($urlrule,$pages,$array).'">'.$pages.'</a><ahref="'.pageurl($urlrule,$curr_page+1,$array).'"class="a1">'.L('next').'</a>'; } } return$multipage; } functionpages1($num,$curr_page,$perpage=20,$urlrule='',$array=array(),$setpages=10){ if(defined('URLRULE')&&$urlrule==''){ $urlrule=URLRULE; $array=$GLOBALS['URL_ARRAY']; }elseif($urlrule==''){ $urlrule=url_par('page={$page}'); } $multipage=''; if($num>$perpage){ $page=$setpages+1; $offset=ceil($setpages/2-1); $pages=ceil($num/$perpage); if(defined('IN_ADMIN')&&!defined('PAGES'))define('PAGES',$pages); $from=$curr_page-$offset; $to=$curr_page+$offset; $more=0; if($page>=$pages){ $from=2; $to=$pages-1; }else{ if($from<=1){ $to=$page-1; $from=2; }elseif($to>=$pages){ $from=$pages-($page-2); $to=$pages-1; } $more=1; } //$multipage.='<aclass="a1">'.$num.L('page_item').'</a>'; if($curr_page>0){ $multipage.='<ahref="###"class="a1">'.L('previous').'</a>'; if($curr_page==1){ $multipage.='<span>1</span>'; }elseif($curr_page>6&&$more){ $multipage.='<ahref="###"/a>..'; }else{ $multipage.='<ahref="###"/a>'; } } for($i=$from;$i<=$to;$i++){ if($i!=$curr_page){ $multipage.='<ahref="###"/a>'; }else{ $multipage.='<span>'.$i.'</span>'; } } if($curr_page<$pages){ if($curr_page<$pages-5&&$more){ $multipage.='..<ahref="###"/a><ahref="###"class="a1">'.L('next').'</a>'; }else{ $multipage.='<ahref="###"/a><ahref="###"class="a1">'.L('next').'</a>'; } }elseif($curr_page==$pages){ $multipage.='<span>'.$pages.'</span><ahref="###"class="a1">'.L('next').'</a>'; }else{ $multipage.='<ahref="###"/a><ahref="###"class="a1">'.L('next').'</a>'; } } return$multipage; } functionpages2($num,$curr_page,$pages,$urlrule='',$array=array(),$setpages=10){ if(defined('URLRULE')&&$urlrule==''){ $urlrule=URLRULE; $array=$GLOBALS['URL_ARRAY']; }elseif($urlrule==''){ $urlrule=url_par('page={$page}'); } $multipage=''; if($pages>1){ $page=$setpages+1; $offset=ceil($setpages/2-1); if(defined('IN_ADMIN')&&!defined('PAGES'))define('PAGES',$pages); $from=$curr_page-$offset; $to=$curr_page+$offset; $more=0; if($page>=$pages){ $from=2; $to=$pages-1; }else{ if($from<=1){ $to=$page-1; $from=2; }elseif($to>=$pages){ $from=$pages-($page-2); $to=$pages-1; } $more=1; } //$multipage.='<aclass="a1">'.$num.L('page_item').'</a>'; if($curr_page>0){ $multipage.='<ahref="###"class="a1">'.L('previous').'</a>'; if($curr_page==1){ $multipage.='<span>1</span>'; }elseif($curr_page>6&&$more){ $multipage.='<ahref="###"/a>..'; }else{ $multipage.='<ahref="###"/a>'; } } for($i=$from;$i<=$to;$i++){ if($i!=$curr_page){ $multipage.='<ahref="###"/a>'; }else{ $multipage.='<span>'.$i.'</span>'; } } if($curr_page<$pages){ if($curr_page<$pages-5&&$more){ $multipage.='..<ahref="###"/a><ahref="###"class="a1">'.L('next').'</a>'; }else{ $multipage.='<ahref="###"/a><ahref="###"class="a1">'.L('next').'</a>'; } }elseif($curr_page==$pages){ $multipage.='<span>'.$pages.'</span><ahref="###"class="a1">'.L('next').'</a>'; }else{ $multipage.='<ahref="###"/a><ahref="###"class="a1">'.L('next').'</a>'; } } return$multipage; } /** *返回分页路径 * *@param$urlrule分页规则 *@param$page当前页 *@param$array需要传递的数组,用于增加额外的方法 *@return完整的URL路径 */ functionpageurl($urlrule,$page,$array=array()){ if(strpos($urlrule,'~')){ $urlrules=explode('~',$urlrule); $urlrule=$page<2?$urlrules[0]:$urlrules[1]; } $findme=array('{$page}'); $replaceme=array($page); if(is_array($array))foreach($arrayas$k=>$v){ $findme[]='{$'.$k.'}'; $replaceme[]=$v; } $url=str_replace($findme,$replaceme,$urlrule); $url=str_replace(array('http://','//','~'),array('~','/','http://'),$url); return$url; } /** *URL路径解析,pages函数的辅助函数 * *@param$par传入需要解析的变量默认为,page={$page} *@param$urlURL地址 *@returnURL */ functionurl_par($par,$url=''){ if($url=='')$url=get_url(); $pos=strpos($url,'?'); if($pos===false){ $url.='?'.$par; }else{ $querystring=substr(strstr($url,'?'),1); parse_str($querystring,$pars); $query_array=array(); foreach($parsas$k=>$v){ if($k!='page')$query_array[$k]=$v; } $querystring=http_build_query($query_array).'&'.$par; $url=substr($url,0,$pos).'?'.$querystring; } return$url; } /** *判断email格式是否正确 *@param$email */ functionis_email($email){ returnstrlen($email)>6&&preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/",$email); } /** *iconv编辑转换 */ if(!function_exists('iconv')){ functioniconv($in_charset,$out_charset,$str){ $in_charset=strtoupper($in_charset); $out_charset=strtoupper($out_charset); if(function_exists('mb_convert_encoding')){ returnmb_convert_encoding($str,$out_charset,$in_charset); }else{ app_base::load_sys_func('iconv'); $in_charset=strtoupper($in_charset); $out_charset=strtoupper($out_charset); if($in_charset=='UTF-8'&&($out_charset=='GBK'||$out_charset=='GB2312')){ returnutf8_to_gbk($str); } if(($in_charset=='GBK'||$in_charset=='GB2312')&&$out_charset=='UTF-8'){ returngbk_to_utf8($str); } return$str; } } } /** *代码广告展示函数 *@paramintval$siteid所属站点 *@paramintval$id广告ID *@return返回广告代码 */ functionshow_ad($siteid,$id){ $siteid=intval($siteid); $id=intval($id); if(!$id||!$siteid)returnfalse; $p=app_base::load_model('poster_model'); $r=$p->get_one(array('spaceid'=>$id,'siteid'=>$siteid),'disabled,setting','idASC'); if($r['disabled'])return''; if($r['setting']){ $c=string2array($r['setting']); }else{ $r['code']=''; } return$c['code']; } /** *获取当前的站点ID */ functionget_siteid(){ static$siteid; if(!empty($siteid))return$siteid; if(defined('IN_ADMIN')){ if($d=param::get_cookie('siteid')){ $siteid=$d; }else{ return''; } }else{ $data=getcache('sitelist','commons'); if(!is_array($data))return'1'; $site_url=SITE_PROTOCOL.SITE_URL; foreach($dataas$v){ if($v['url']==$site_url.'/')$siteid=$v['siteid']; } } if(empty($siteid))$siteid=1; return$siteid; } /** *获取用户昵称 *不传入userid取当前用户nickname,如果nickname为空取username *传入field,取用户$field字段信息 */ functionget_nickname($userid='',$field=''){ $return=''; if(is_numeric($userid)){ $member_db=app_base::load_model('member_model'); $memberinfo=$member_db->get_one(array('userid'=>$userid)); if(!empty($field)&&$field!='nickname'&&isset($memberinfo[$field])&&!empty($memberinfo[$field])){ $return=$memberinfo[$field]; }else{ $return=isset($memberinfo['nickname'])&&!empty($memberinfo['nickname'])?$memberinfo['nickname'].'('.$memberinfo['username'].')':$memberinfo['username']; } }else{ if(param::get_cookie('_nickname')){ $return.='('.param::get_cookie('_nickname').')'; }else{ $return.='('.param::get_cookie('_username').')'; } } return$return; } /** *获取用户信息 *不传入$field返回用户所有信息, *传入field,取用户$field字段信息 */ functionget_memberinfo($userid,$field=''){ if(!is_numeric($userid)){ returnfalse; }else{ static$memberinfo; if(!isset($memberinfo[$userid])){ $member_db=app_base::load_model('member_model'); $memberinfo[$userid]=$member_db->get_one(array('userid'=>$userid)); } if(!empty($field)&&!empty($memberinfo[$userid][$field])){ return$memberinfo[$userid][$field]; }else{ return$memberinfo[$userid]; } } } /** *通过username值,获取用户所有信息 *获取用户信息 *不传入$field返回用户所有信息, *传入field,取用户$field字段信息 */ functionget_memberinfo_buyusername($username,$field=''){ if(empty($username)){returnfalse;} static$memberinfo; if(!isset($memberinfo[$username])){ $member_db=app_base::load_model('member_model'); $memberinfo[$username]=$member_db->get_one(array('username'=>$username)); } if(!empty($field)&&!empty($memberinfo[$username][$field])){ return$memberinfo[$username][$field]; }else{ return$memberinfo[$username]; } } /** *调用关联菜单 *@param$linkageid联动菜单id *@param$id生成联动菜单的样式id *@param$defaultvalue默认值 */ functionmenu_linkage($linkageid=0,$id='linkid',$defaultvalue=0,$defaultlabel=array()){ $linkageid=intval($linkageid); $datas=array(); $datas=getcache($linkageid,'linkage'); $infos=$datas['data']; if($datas['style']=='1'){ $title=$datas['title']; $container='content'.create_randomnum(100,999).date('is'); if(!defined('DIALOG_INIT_1')){ define('DIALOG_INIT_1',1); $string.='<scripttype="text/javascript"src="'.JS_PATH.'dialog.js"></script>'; //TODO$string.='<linkhref="'.CSS_PATH.'dialog.css"rel="stylesheet"type="text/css">'; } if(!defined('LINKAGE_INIT_1')){ define('LINKAGE_INIT_1',1); $string.='<scripttype="text/javascript"src="'.JS_PATH.'linkage/js/pop.js"></script>'; } $var_div=$defaultvalue&&(ROUTE_A=='edit'||ROUTE_A=='account_manage_info'||ROUTE_A=='info_publish'||ROUTE_A=='orderinfo')?menu_linkage_level($defaultvalue,$linkageid,$infos):$datas['title']; $var_input=$defaultvalue&&(ROUTE_A=='edit'||ROUTE_A=='account_manage_info'||ROUTE_A=='info_publish')?'<inputtype="hidden"name="info['.$id.']"value="'.$defaultvalue.'">':'<inputtype="hidden"name="info['.$id.']"value="">'; $string.='<divname="'.$id.'"value=""id="'.$id.'"class="ib">'.$var_div.'</div>'.$var_input.'<inputtype="button"name="btn_'.$id.'"class="button"value="'.L('linkage_select').'">$string.='<scripttype="text/javascript">'; $string.='varreturnid_'.$id.'=\''.$id.'\';'; $string.='varreturnkeyid_'.$id.'=\''.$linkageid.'\';'; $string.='var'.$container.'=newArray('; foreach($infosAS$k=>$v){ if($v['parentid']==0){ $s[]='newArray(\''.$v['linkageid'].'\',\''.$v['name'].'\',\''.$v['parentid'].'\')'; }else{ continue; } } $s=implode(',',$s); $string.=$s; $string.=')'; $string.='</script>'; }elseif($datas['style']=='2'){ if(!defined('LINKAGE_INIT_1')){ define('LINKAGE_INIT_1',1); $string.='<scripttype="text/javascript"src="'.JS_PATH.'linkage/js/jquery.ld.js"></script>'; } $default_txt=''; if($defaultvalue){ $default_txt=menu_linkage_level($defaultvalue,$linkageid,$infos); $default_txt='["'.str_replace('>','","',$default_txt).'"]'; } $string.=$defaultvalue&&(ROUTE_A=='edit'||ROUTE_A=='account_manage_info'||ROUTE_A=='info_publish')?'<inputtype="hidden"name="info['.$id.']"id="'.$id.'"value="'.$defaultvalue.'">':'<inputtype="hidden"name="info['.$id.']"id="'.$id.'"value="">'; for($i=1;$i<=$datas['setting']['level'];$i++){ $txt=isset($defaultlabel[$i])?$defaultlabel[$i]:'请选择'; $string.='<selectclass="pc-select-'.$id.'"name="'.$id.'-'.$i.'"id="'.$id.'-'.$i.'"width="100"><optionvalue="">'.$txt.'</option></select>'; } $string.='<scripttype="text/javascript"> $(function(){ var$ld5=$(".pc-select-'.$id.'"); $ld5.ld({ajaxOptions:{"url":"'.APP_PATH.'api.php?op=get_linkage&act=ajax_select&keyid='.$linkageid.'"},defaultParentId:0,style:{"width":120}}) varld5_api=$ld5.ld("api"); //ld5_api.selected('.$default_txt.'); $ld5.bind("change",onchange); functiononchange(e){ var$target=$(e.target); varindex=$ld5.index($target); $("#'.$id.'-'.$i.'").remove(); $("#'.$id.'").val($ld5.eq(index).show().val()); index++; $ld5.eq(index).show();} }) </script>'; }else{ $title=$defaultvalue?$infos[$defaultvalue]['name']:$datas['title']; $colObj=create_randomnum(100,999).date('is'); $string=''; if(!defined('LINKAGE_INIT')){ define('LINKAGE_INIT',1); $string.='<scripttype="text/javascript"src="'.JS_PATH.'linkage/js/mln.colselect.js"></script>'; if(defined('IN_ADMIN')){ $string.='<linkhref="'.JS_PATH.'linkage/style/admin.css"rel="stylesheet"type="text/css">'; }else{ $string.='<linkhref="'.JS_PATH.'linkage/style/css.css"rel="stylesheet"type="text/css">'; } } $string.='<inputtype="hidden"name="info['.$id.']"value="1"><divid="'.$id.'"></div>'; $string.='<scripttype="text/javascript">'; $string.='varcolObj'.$colObj.'={"Items":['; foreach($infosAS$k=>$v){ $s.='{"name":"'.$v['name'].'","topid":"'.$v['parentid'].'","colid":"'.$k.'","value":"'.$k.'","fun":function(){}},'; } $string.=substr($s,0,-1); $string.=']};'; $string.='$("#'.$id.'").mlnColsel(colObj'.$colObj.',{'; $string.='title:"'.$title.'",'; $string.='value:"'.$defaultvalue.'",'; $string.='width:100'; $string.='});'; $string.='</script>'; } return$string; } /** *联动菜单层级 */ functionmenu_linkage_level($linkageid,$keyid,$infos,$result=array()){ if(array_key_exists($linkageid,$infos)){ $result[]=$infos[$linkageid]['name']; returnmenu_linkage_level($infos[$linkageid]['parentid'],$keyid,$infos,$result); } krsort($result); returnimplode('>',$result); } /** *通过catid获取显示菜单完整结构 *@param$menuid菜单ID *@param$cache_file菜单缓存文件名称 *@param$cache_path缓存文件目录 *@param$key取得缓存值的键值名称 *@param$parentkey父级的ID *@param$linkstring链接字符 */ functionmenu_level($menuid,$cache_file,$cache_path='commons',$key='catname',$parentkey='parentid',$linkstring='>',$result=array()){ $menu_arr=getcache($cache_file,$cache_path); if(array_key_exists($menuid,$menu_arr)){ $result[]=$menu_arr[$menuid][$key]; returnmenu_level($menu_arr[$menuid][$parentkey],$cache_file,$cache_path,$key,$parentkey,$linkstring,$result); } krsort($result); returnimplode($linkstring,$result); } /** *通过id获取显示联动菜单 *@param$linkageid联动菜单ID *@param$keyid菜单keyid *@param$space菜单间隔符 *@param$tyoe1返回间隔符链接,完整路径名称3返回完整路径数组,2返回当前联动菜单名称,4直接返回ID *@param$result递归使用字段1 *@param$infos递归使用字段2 */ functionget_linkage($linkageid,$keyid,$space='>',$type=1,$result=array(),$infos=array()){ if($space==''||!isset($space))$space='>'; if(!$infos){ $datas=getcache($keyid,'linkage'); $infos=$datas['data']; } if($type==1||$type==3||$type==4){ if(array_key_exists($linkageid,$infos)){ $result[]=($type==1)?$infos[$linkageid]['name']:(($type==4)?$linkageid:$infos[$linkageid]); returnget_linkage($infos[$linkageid]['parentid'],$keyid,$space,$type,$result,$infos); }else{ if(count($result)>0){ krsort($result); if($type==1||$type==4)$result=implode($space,$result); return$result; }else{ return$result; } } }else{ return$infos[$linkageid]['name']; } } /** *IE浏览器判断 */ functionis_ie(){ $useragent=strtolower($_SERVER['HTTP_USER_AGENT']); if((strpos($useragent,'opera')!==false)||(strpos($useragent,'konqueror')!==false))returnfalse; if(strpos($useragent,'msie')!==false)returntrue; returnfalse; } /** *文件下载 *@param$filepath文件路径 *@param$filename文件名称 */ functionfile_down($filepath,$filename=''){ if(!$filename)$filename=basename($filepath); if(is_ie())$filename=rawurlencode($filename); $filetype=fileext($filename); $filesize=sprintf("%u",filesize($filepath)); if(ob_get_length()!==false)@ob_end_clean(); header('Pragma:public'); header('Last-Modified:'.gmdate('D,dMYH:i:s').'GMT'); header('Cache-Control:no-store,no-cache,must-revalidate'); header('Cache-Control:pre-check=0,post-check=0,max-age=0'); header('Content-Transfer-Encoding:binary'); header('Content-Encoding:none'); header('Content-type:'.$filetype); header('Content-Disposition:attachment;filename="'.$filename.'"'); header('Content-length:'.$filesize); readfile($filepath); exit; } /** *判断字符串是否为utf8编码,英文和半角字符返回ture *@param$string *@returnbool */ functionis_utf8($string){ returnpreg_match('%^(?: [\x09\x0A\x0D\x20-\x7E]#ASCII |[\xC2-\xDF][\x80-\xBF]#non-overlong2-byte |\xE0[\xA0-\xBF][\x80-\xBF]#excludingoverlongs |[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}#straight3-byte |\xED[\x80-\x9F][\x80-\xBF]#excludingsurrogates |\xF0[\x90-\xBF][\x80-\xBF]{2}#planes1-3 |[\xF1-\xF3][\x80-\xBF]{3}#planes4-15 |\xF4[\x80-\x8F][\x80-\xBF]{2}#plane16 )*$%xs',$string); } /** *组装生成ID号 *@param$modules模块名 *@param$contentid内容ID *@param$siteid站点ID */ functionid_encode($modules,$contentid,$siteid){ returnurlencode($modules.'-'.$contentid.'-'.$siteid); } /** *解析ID *@param$id评论ID */ functionid_decode($id){ returnexplode('-',$id); } /** *对用户的密码进行加密 *@param$password *@param$encrypt//传入加密串,在修改密码时做认证 *@returnarray/password */ functionpassword($password,$encrypt=''){ $pwd=array(); $pwd['encrypt']=$encrypt?$encrypt:create_randomstr(); $pwd['password']=md5(md5(trim($password)).$pwd['encrypt']); return$encrypt?$pwd['password']:$pwd; } /** *生成随机字符串 *@paramstring$lenth长度 *@returnstring字符串 */ functioncreate_randomstr($lenth=6){ //openssl_random_pseudo_bytes $fp=@fopen('/dev/urandom','rb'); $pr_bits=''; if($fp!==FALSE){ $pr_bits.=@fread($fp,$lenth/2); @fclose($fp); } returnbin2hex($pr_bits); //returnrandom($lenth,'123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ'); } /** *生成随机数 *@paramstring$lenth长度 *@returnstring字符串 */ functioncreate_randomnum($min,$max){ //openssl_random_pseudo_bytes $difference=$max-$min; $bytesNeeded=ceil($difference/256); $fp=@fopen('/dev/urandom','rb'); if($fp!==FALSE){ $randomBytes=@fread($fp,$bytesNeeded); @fclose($fp); } $sum=0; for($a=0;$a<$bytesNeeded;$a++){ $sum+=ord($randomBytes[$a]); } $sum=$sum%($difference); return$sum+$min; //returnrandom($lenth,'123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ'); } /** *检查密码长度是否符合规定 * *@paramSTRING$password *@returnTRUEorFALSE */ functionis_password($password){ $strlen=strlen($password); if($strlen>=6&&$strlen<=20)returntrue; returnfalse; } /** *检测输入中是否含有错误字符 * *@paramchar$string要检查的字符串名称 *@returnTRUEorFALSE */ functionis_badword($string){ $badwords=array("\\",'&','',"'",'"','/','*',',','<','>',"\r","\t","\n","#"); foreach($badwordsas$value){ if(strpos($string,$value)!==FALSE){ returnTRUE; } } returnFALSE; } /** *检查用户名是否符合规定 * *@paramSTRING$username要检查的用户名 *@returnTRUEorFALSE */ functionis_username($username){ $strlen=strlen($username); if(is_badword($username)||!preg_match("/^[a-zA-Z0-9_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/",$username)){ returnfalse; }elseif(20<$strlen||$strlen<2){ returnfalse; } returntrue; } /** *检查id是否存在于数组中 * *@param$id *@param$ids *@param$s */ functioncheck_in($id,$ids='',$s=','){ if(!$ids)returnfalse; $ids=explode($s,$ids); returnis_array($id)?array_intersect($id,$ids):in_array($id,$ids); } /** *对数据进行编码转换 *@paramarray/string$data数组 *@paramstring$input需要转换的编码 *@paramstring$output转换后的编码 */ functionarray_iconv($data,$input='gbk',$output='utf-8'){ if(!is_array($data)){ returniconv($input,$output,$data); }else{ foreach($dataas$key=>$val){ if(is_array($val)){ $data[$key]=array_iconv($val,$input,$output); }else{ $data[$key]=iconv($input,$output,$val); } } return$data; } } /** *生成缩略图函数 *@param$imgurl图片路径 *@param$width缩略图宽度 *@param$height缩略图高度 *@param$autocut是否自动裁剪默认裁剪,当高度或宽度有一个数值为0是,自动关闭 *@param$smallpic无图片是默认图片路径 */ functionthumb($imgurl,$width=100,$height=100,$autocut=1,$smallpic='nopic.gif'){ global$image; $upload_url=app_base::load_config('system','upload_url'); $upload_path=app_base::load_config('system','upload_path'); if(empty($imgurl))returnIMG_PATH.$smallpic; $imgurl_replace=str_replace($upload_url,'',$imgurl); if(!extension_loaded('gd')||strpos($imgurl_replace,'://'))return$imgurl; if(!file_exists($upload_path.$imgurl_replace))returnIMG_PATH.$smallpic; list($width_t,$height_t,$type,$attr)=getimagesize($upload_path.$imgurl_replace); if($width>=$width_t||$height>=$height_t)return$imgurl; $newimgurl=dirname($imgurl_replace).'/thumb_'.$width.'_'.$height.'_'.basename($imgurl_replace); if(file_exists($upload_path.$newimgurl))return$upload_url.$newimgurl; if(!is_object($image)){ app_base::load_sys_class('image','','0'); $image=newimage(1,0); } return$image->thumb($upload_path.$imgurl_replace,$upload_path.$newimgurl,$width,$height,'',$autocut)?$upload_url.$newimgurl:$imgurl; } /** *水印添加 *@param$source原图片路径 *@param$target生成水印图片途径,默认为空,覆盖原图 *@param$siteid站点id,系统需根据站点id获取水印信息 */ functionwatermark($source,$target='',$siteid){ global$image_w; if(empty($source))return$source; if(!extension_loaded('gd')||strpos($source,'://'))return$source; if(!$target)$target=$source; if(!is_object($image_w)){ app_base::load_sys_class('image','','0'); $image_w=newimage(0,$siteid); } $image_w->watermark($source,$target); return$target; } /** *当前路径 *返回指定栏目路径层级 *@param$catid栏目id *@param$symbol栏目间隔符 */ functioncatpos($catid,$symbol='>'){ $category_arr=array(); $siteids=getcache('category_content','commons'); $siteid=$siteids[$catid]; $category_arr=getcache('category_content_'.$siteid,'commons'); if(!isset($category_arr[$catid]))return''; $pos=''; $siteurl=siteurl($category_arr[$catid]['siteid']); $arrparentid=array_filter(explode(',',$category_arr[$catid]['arrparentid'].','.$catid)); foreach($arrparentidas$catid){ $url=$category_arr[$catid]['url']; //if(strpos($url,'://')===false)$url=$siteurl.$url; $pos.='<ahref="'.$url.'">'.$category_arr[$catid]['catname'].'</a>'.$symbol; } return$pos; } /** *根据catid获取子栏目数据的sql语句 *@paramstring$module缓存文件名 *@paramintval$catid栏目ID */ functionget_sql_catid($file='category_content_1',$catid=0,$module='commons'){ $category=getcache($file,$module); $catid=intval($catid); if(!isset($category[$catid]))returnfalse; return$category[$catid]['child']?"catidIN(".$category[$catid]['arrchildid'].")":"catid=$catid"; } /** *获取子栏目 *@param$parentid父级id *@param$type栏目类型 *@param$self是否包含本身0为不包含 *@param$siteid站点id */ functionsubcat($parentid=NULL,$type=NULL,$self='0',$siteid=''){ if(empty($siteid))$siteid=get_siteid(); $category=getcache('category_content_'.$siteid,'commons'); foreach($categoryas$id=>$cat){ if($cat['siteid']==$siteid&&($parentid===NULL||$cat['parentid']==$parentid)&&($type===NULL||$cat['type']==$type))$subcat[$id]=$cat; if($self==1&&$cat['catid']==$parentid&&!$cat['child'])$subcat[$id]=$cat; } return$subcat; } /** *获取内容地址 *@param$catid栏目ID *@param$id文章ID *@param$allurl是否以绝对路径返回 */ functiongo($catid,$id,$allurl=0){ static$category; if(empty($category)){ $siteids=getcache('category_content','commons'); $siteid=$siteids[$catid]; $category=getcache('category_content_'.$siteid,'commons'); } $id=intval($id); if(!$id||!isset($category[$catid]))return''; $modelid=$category[$catid]['modelid']; if(!$modelid)return''; $db=app_base::load_model('content_model'); $db->set_model($modelid); $r=$db->setCache()->get_one(array('id'=>$id),'url'); if(!empty($allurl)){ if(strpos($r['url'],'://')===false){ if(strpos($category[$catid]['url'],'://')===FALSE){ $site=siteinfo($category[$catid]['siteid']); $r['url']=substr($site['domain'],0,-1).$r['url']; }else{ $r['url']=$category[$catid]['url'].$r['url']; } } } return$r['url']; } /** *将附件地址转换为绝对地址 *@param$path附件地址 */ functionatturl($path){ if(strpos($path,':/')){ return$path; }else{ $sitelist=getcache('sitelist','commons'); $siteid=get_siteid(); $siteurl=$sitelist[$siteid]['domain']; $domainlen=strlen($sitelist[$siteid]['domain'])-1; $path=$siteurl.$path; $path=substr_replace($path,'/',strpos($path,'//',$domainlen),2); return$path; } } /** *判断模块是否安装 *@param$m模块名称 */ functionmodule_exists($m=''){ if($m=='admin')returntrue; $modules=getcache('modules','commons'); $modules=array_keys($modules); returnin_array($m,$modules); } /** *生成SEO *@param$siteid站点ID *@param$catid栏目ID *@param$title标题 *@param$description描述 *@param$keyword关键词 */ functionseo($siteid,$catid='',$title='',$description='',$keyword=''){ if(!empty($title))$title=strip_tags($title); if(!empty($description))$description=strip_tags($description); if(!empty($keyword))$keyword=str_replace('',',',strip_tags($keyword)); $sites=getcache('sitelist','commons'); $site=$sites[$siteid]; $cat=array(); if(!empty($catid)){ $siteids=getcache('category_content','commons'); $siteid=$siteids[$catid]; $categorys=getcache('category_content_'.$siteid,'commons'); $cat=$categorys[$catid]; $cat['setting']=string2array($cat['setting']); } $seo['site_title']=isset($site['site_title'])&&!empty($site['site_title'])?$site['site_title']:$site['name']; $seo['keyword']=!empty($keyword)?$keyword:$site['keywords']; $seo['description']=isset($description)&&!empty($description)?$description:(isset($cat['setting']['meta_description'])&&!empty($cat['setting']['meta_description'])?$cat['setting']['meta_description']:(isset($site['description'])&&!empty($site['description'])?$site['description']:'')); $seo['title']=(isset($title)&&!empty($title)?$title.'-':'').(isset($cat['setting']['meta_title'])&&!empty($cat['setting']['meta_title'])?$cat['setting']['meta_title'].'-':(isset($cat['catname'])&&!empty($cat['catname'])?$cat['catname'].'-':'')); foreach($seoas$k=>$v){ $seo[$k]=str_replace(array("\n","\r"),'',$v); } return$seo; } /** *获取站点的信息 *@param$siteid站点ID */ functionsiteinfo($siteid){ static$sitelist; if(empty($sitelist))$sitelist=getcache('sitelist','commons'); returnisset($sitelist[$siteid])?$sitelist[$siteid]:''; } /** *生成CNZZ统计代码 */ functiontjcode(){ if(!module_exists('cnzz'))returnfalse; $config=getcache('cnzz','commons'); if(empty($config)){ returnfalse; }else{ return'<scriptsrc=\'http://pw.cnzz.com/c.php?id='.$config['siteid'].'&l=2\'language=\'JavaScript\'charset=\'gb2312\'></script>'; } } /** *生成标题样式 *@param$style样式 *@param$html是否显示完整的STYLE */ functiontitle_style($style,$html=1){ $str=''; if($html)$str='style="'; $style_arr=explode(';',$style); if(!empty($style_arr[0]))$str.='color:'.$style_arr[0].';'; if(!empty($style_arr[1]))$str.='font-weight:'.$style_arr[1].';'; if($html)$str.='"'; return$str; } /** *获取站点域名 *@param$siteid站点id */ functionsiteurl($siteid){ static$sitelist; returnWEB_PATH; //if(!$siteid)returnWEB_PATH; //if(empty($sitelist))$sitelist=getcache('sitelist','commons'); //returnsubstr($sitelist[$siteid]['domain'],0,-1); } /** *生成上传附件验证 *@param$args参数 *@param$operation操作类型(加密解密) */ functionupload_key($args){ $pc_auth_key=md5(app_base::load_config('system','auth_key').$_SERVER['HTTP_USER_AGENT']); $authkey=md5($args.$pc_auth_key); return$authkey; } /** *文本转换为图片 *@paramstring$txt图形化文本内容 *@paramint$fonttype无外部字体时生成文字大小,取值范围1-5 *@paramint$fontsize引入外部字体时,字体大小 *@paramstring$font字体名称字体请放于app\libs\data\font下 *@paramstring$fontcolor字体颜色十六进制形式如FFFFFF,FF0000 */ functionstring2img($txt,$fonttype=5,$fontsize=16,$font='',$fontcolor='FF0000',$transparent='1'){ if(empty($txt))returnfalse; if(function_exists("imagepng")){ $txt=urlencode(sys_auth($txt)); $txt='<imgsrc="'.APP_PATH.'api.php?op=creatimg&txt='.$txt.'&f'.$version['pc_release']; } } /** *运行钩子(插件使用) */ functionrunhook($method){ $time_start=getmicrotime(); $data=''; $getpclass=FALSE; $hook_appid=getcache('hook','plugins'); if(!empty($hook_appid)){ foreach($hook_appidas$appid=>$p){ $pluginfilepath=CODE_PATH.'plugin'.DIRECTORY_SEPARATOR.$p.DIRECTORY_SEPARATOR.'hook.class.php'; $getpclass=TRUE; include_once$pluginfilepath; } $hook_appid=array_flip($hook_appid); if($getpclass){ $pclass=newReflectionClass('hook'); foreach($pclass->getMethods()as$r){ $legalmethods[]=$r->getName(); } } if(in_array($method,$legalmethods)){ foreach(get_declared_classes()as$class){ $refclass=newReflectionClass($class); if($refclass->isSubclassOf('hook')){ if($_method=$refclass->getMethod($method)){ $classname=$refclass->getName(); if($_method->isPublic()&&$_method->isFinal()){ plugin_stat($hook_appid[$classname]); $data.=$_method->invoke(null); } } } } } return$data; } } functiongetmicrotime(){ list($usec,$sec)=explode("",microtime()); return((float)$usec+(float)$sec); } /** *插件前台模板加载 *Enterdescriptionhere... *@paramunknown_type$module *@paramunknown_type$template *@paramunknown_type$style */ functionp_template($plugin='content',$template='index',$style='default'){ if(!$style)$style='default'; $template_cache=app_base::load_sys_class('template_cache'); $compiledtplfile=ROOT_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_template'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.'plugin'.DIRECTORY_SEPARATOR.$plugin.DIRECTORY_SEPARATOR.$template.'.php'; if(!file_exists($compiledtplfile)||(file_exists(CODE_PATH.'plugin'.DIRECTORY_SEPARATOR.$plugin.DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR.$template.'.html')&&filemtime(CODE_PATH.'plugin'.DIRECTORY_SEPARATOR.$plugin.DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR.$template.'.html')>filemtime($compiledtplfile))){ $template_cache->template_compile('plugin/'.$plugin,$template,'default'); }elseif(!file_exists(CODE_PATH.'plugin'.DIRECTORY_SEPARATOR.$plugin.DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR.$template.'.html')){ showmessage('Templatedoesnotexist.'.DIRECTORY_SEPARATOR.'plugin'.DIRECTORY_SEPARATOR.$plugin.DIRECTORY_SEPARATOR.$template.'.html'); } return$compiledtplfile; } /** *读取缓存动态页面 */ functioncache_page_start(){ $relate_url=isset($_SERVER['REQUEST_URI'])?safe_replace($_SERVER['REQUEST_URI']):$php_self.(isset($_SERVER['QUERY_STRING'])?'?'.safe_replace($_SERVER['QUERY_STRING']):$path_info); define('CACHE_PAGE_ID',md5($relate_url)); $contents=getcache(CACHE_PAGE_ID,'page_tmp/'.substr(CACHE_PAGE_ID,0,2)); if($contents&&intval(substr($contents,15,10))>SYS_TIME){ echosubstr($contents,29); exit; } if(!defined('HTML'))define('HTML',true); returntrue; } /** *写入缓存动态页面 */ functioncache_page($ttl=360,$isjs=0){ if($ttl==0||!defined('CACHE_PAGE_ID'))returnfalse; $contents=ob_get_contents(); if($isjs)$contents=format_js($contents); $contents="<!--expiretime:".(SYS_TIME+$ttl)."-->\n".$contents; setcache(CACHE_PAGE_ID,$contents,'page_tmp/'.substr(CACHE_PAGE_ID,0,2)); } /** * *获取远程内容 *@param$url接口url地址 *@param$timeout超时时间 */ functionpc_file_get_contents($url,$timeout=30){ $stream=stream_context_create(array('http'=>array('timeout'=>$timeout))); return@file_get_contents($url,0,$stream); } /** *Functionget_vid *获取视频信息 *@paramint$contentid内容ID必须 *@paramint$catid栏目id取内容里面视频信息时必须 *@paramint$isspecial是否取专题的视频信息 */ functionget_vid($contentid=0,$catid=0,$isspecial=0){ static$categorys; if(!$contentid)returnfalse; if(!$isspecial){ if(!$catid)returnfalse; $contentid=intval($contentid); $catid=intval($catid); $siteid=get_siteid(); if(!$categorys){ $categorys=getcache('category_content_'.$siteid,'commons'); } $modelid=$categorys[$catid]['modelid']; $video_content=app_base::load_model('video_content_model'); $r=$video_content->get_one(array('contentid'=>$contentid,'modelid'=>$modelid),'videoid','listorderASC'); $video_store=app_base::load_model('video_store_model'); return$video_store->get_one(array('videoid'=>$r['videoid'])); }else{ $special_content=app_base::load_model('special_content_model'); $contentid=intval($contentid); $video_store=app_base::load_model('video_store_model'); $r=$special_content->get_one(array('id'=>$contentid),'videoid'); return$video_store->get_one(array('videoid'=>$r['videoid'])); } } /** *Functiondataformat *时间转换 *@param$nINT时间 */ functiondataformat($n){ $hours=floor($n/3600); $minite=floor($n%3600/60); $secend=floor($n%3600%60); $minite=$minite<10?"0".$minite:$minite; $secend=$secend<10?"0".$secend:$secend; if($n>=3600){ return$hours.":".$minite.":".$secend; }else{ return$minite.":".$secend; } } functionhttpResponse($status,$msg=''){ $m=app_base::load_model('category_model'); $CATEGORYS=$m->select(array('parentid'=>0),'*','','listorder'); includeCODE_PATH.'libs'.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'http'.DIRECTORY_SEPARATOR.$status.'.php'; } functionarray_change_key_case_recursive($arr) { if(!$arr||!is_array($arr))returnarray(); returnarray_map(function($item){ if(is_array($item)) $item=array_change_key_case_recursive($item); return$item; },array_change_key_case($arr)); } functionvisitauth(){ $vtime=time(); $vsign=md5("cuichuande@ideadata.com.cn#$%".$vtime); return"tm={$vtime}&sn={$vsign}"; } ?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php程序设计安全教程》、《php安全过滤技巧总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。