常用PHP源码分析解释

常用PHP源码分析解释

ID:41116487

大小:219.50 KB

页数:51页

时间:2019-08-16

上传者:qwe189537
常用PHP源码分析解释_第1页
常用PHP源码分析解释_第2页
常用PHP源码分析解释_第3页
常用PHP源码分析解释_第4页
常用PHP源码分析解释_第5页
资源描述:

《常用PHP源码分析解释》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

诚信为人2006-06-1101:47if($db_ads&&!$windid&&(is_numeric($u)||($a&&strlen($a)[/color][color=#ff0000]16))&&strpos($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST'])===false){//设置用户宣传cookieuseradsCookie('userads',"$ut$a");}//如果SCR常量没有定义if(!defined('SCR')){//定义其为otherdefine('SCR','other');}//标记页面类型$SCR=SCR;$header_ad=$footer_ad='';//如果页面类型不是帖子页面if(SCR!='read'){//取得广告信息数组$advertdb=AdvertInit(SCR,$fid);//is_array--检测变量是否是数组if(is_array($advertdb['header'])){ //array_rand--从数组中随机取出一个或多个单元 //取得页首广告 $header_ad=$advertdb['header'][array_rand($advertdb['header'])]['code'];}if(is_array($advertdb['footer'])){ //取得页尾广告 $footer_ad=$advertdb['footer'][array_rand($advertdb['footer'])]['code'];}}//返回页首导航类似霏凡论坛->口-超级灌水functionheadguide($guidename=array(),$guide=''){global$fid,$jinhua;if(is_array($guidename)){ foreach($guidenameas$key=>$value){  if($key){   $headguide.=$value?"->$key":"->$key";  } }}else{ $headguide.="->".$guidename;} //返回页首导航字符串return$headguide;}//页面跳转functionrefreshto($URL,$content,$statime=1){global$db_ifjump;//替换url中的特殊字符=$URL=str_replace('=','=',$URL);//如果开启自动跳转且多少秒后抓向$statime大于0if($db_ifjump&&$statime>0){ //清空缓冲 ob_end_clean(); //是否允许GZIP压缩输出,允许使用ob_gzhandler压缩技术,否则只启动缓冲 global$tplpath,$fid,$imgpath,$db_obstart,$db_bbsname,$skin,$B_url; $index_name=&$db_bbsname; $index_url=&$B_url; $db_obstart==1?ob_start('ob_gzhandler'):ob_start(); //确定引用风格 if(file_exists(D_P."data/style/$skin.php")&&strpos($skin,'..')===false){  include_once(D_P."data/style/$skin.php"); }else{  include_once(D_P."data/style/wind.php"); } //解出全局变量数组,如果有冲突不覆盖 @extract($GLOBALS,EXTR_SKIP); //包含对应风格目录下的lang_refreshto.php语言文件,如果其中有重复包含,略过 require_onceGetLang('refreshto'); $lang[$content]&&$content=$lang[$content]; //包含对应风格目录下的refreshto.htm文件 @requirePrintEot('refreshto'); //退出 exit;}else{ ObHeader($URL);}}//页面直接转向functionObHeader($URL){global$db_obstart,$db_bbsurl,$db_htmifopen;//strtolower-小写处理字符串 //如果开启静态目录部署功能且url中不是http开头if($db_htmifopen&&strtolower(substr($URL,0,4))!='http'){ $URL="$db_bbsurl/$URL";}//页面直接转向if($db_obstart){ //header--发送一个原始HTTP标头 header("Location:$URL");exit;}else{ ob_start(); echo""; exit;}}//转向显示提示信息的页面显示提示信息functionShowmsg($msg_info,$dejump=0){//extract--从数组中将变量导入到当前的符号表//extract()检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。对待非法/数字和冲突的键名的方法将根据extract_type参数决定。可以是以下值之一://EXTR_OVERWRITE(如果有冲突,覆盖已有的变量)//EXTR_SKIP(如果有冲突,不覆盖已有的变量)//EXTR_PREFIX_SAME(如果有冲突,在变量名前加上前缀prefix)//EXTR_PREFIX_ALL(给所有变量名加上前缀prefix)//EXTR_PREFIX_INVALID(仅在非法/数字的变量名前加上前缀prefix)//EXTR_IF_EXISTS(仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。可以用在已经定义了一组合法的变量,然后要从一个数组例如$_REQUEST中提取值覆盖这些变量的场合。)//EXTR_PREFIX_IF_EXISTS(仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理)//EXTR_REFS(将变量作为引用提取。这有力地表明了导入的变量仍然引用了var_array参数的值。可以单独使用这个标志或者在extract_type中用OR与其它任何标志结合使用)//如果没有指定extract_type,则被假定为EXTR_OVERWRITE。//extract()返回成功导入到符号表中的变量数目。//$GLOBALS由所有已定义全局变量组成的数组。变量名就是该数组的索引。//将全局变量导入当前符号表@extract($GLOBALS,EXTR_SKIP);//在函数中声明了全局变量,任何变量的所有引用变量都会指向到全局变量。包括修改//声明全局变量,风格图片文件路径$stylepath,表格宽度$tablewidth,小表格宽度$mtablewidth,风格模板路径$tplpath,$runfcglobal$stylepath,$tablewidth,$mtablewidth,$tplpath,$runfc;$runfc=''; //检查SIMPLE常量是否定义,如果定义过if(defined('SIMPLE')){ //是一个链接基准标记,用以改变页面中所有链接标记的参数默认值。 echo"";}//包含require/header.php文件,如果其中有重复包含,略过require_once(R_P.'require/header.php');//包含对应风格目录下的lang_msg.php语言文件,如果其中有重复包含,略过require_onceGetLang('msg');//如果相应的语言文件中对应键值存在,则设置$msg_info为对应值$lang[$msg_info]&&$msg_info=$lang[$msg_info];//包含对应风格目录下的showmsg.htm文件require_oncePrintEot('showmsg');exit;}//返回参数指定的文件相应风格语言文件路径functionGetLang($lang,$EXT="php"){//声明全局变量风格模板路径global$tplpath;//路径为……$path=R_P."template/$tplpath/lang_$lang.$EXT";//如果该风格下模板指定的文件不存在,则路径为默认的wind风格下的对应文件!file_exists($path)&&$path=R_P."template/wind/lang_$lang.$EXT";return$path;}//返回参数指定的文件相应风格模板路径functionPrintEot($template,$EXT="htm"){//Copyright(c)2003-06PHPWind//声明全局变量风格模板路径global$tplpath;//如果参数为空,则设置参数值为Nif(!$template)$template=N;//路径为……$path=R_P."template/$tplpath/$template.$EXT";//如果该风格下模板指定的文件不存在,则路径为默认的wind风格下的对应文件!file_exists($path)&&$path=R_P."template/wind/$template.$EXT";return$path;}//设置相关cookiefunctionCookie($ck_Var,$ck_Value,$ck_Time='F'){//声明全局变量COOKIE有效目录$db_ckpath,COOKIE有效域名 $db_ckdomain,$timestampglobal$db_ckpath,$db_ckdomain,$timestamp;//如果设置有效的cookie时间参数为F则,cookie有效时间设置为31536000s即1年//否则如果传入的cookie参数值为空并且有效时间参数为0则设置cookie有效时间为31536000s即1年前,也就是无效//如果都不是则设置时间为传入的cookie有效时间参数值$ck_Time=$ck_Time=='F'?$timestamp+31536000:($ck_Value==''&&$ck_Time==0?$timestamp-31536000:$ck_Time);//SERVER_PORT-服务器所使用的端口。默认为“80”。如果使用SSL安全连接,则这个值为用户设置的HTTP端口。//判断是否使用安全连接$S=$_SERVER['SERVER_PORT']=='443'?1:0;//如果COOKIE有效目录为空则设置其为根目录!$db_ckpath&&$db_ckpath='/';//setcookie--发送一个cookie信息//参数说明:Cookie的名字,Cookie的值,Cookie过期的时间(这是个Unix时间戳,即从Unix纪元开始的秒数),Cookie在服务器端的有效路径,该cookie有效的域名,指明cookie是否仅通过安全的HTTPS连接传送(当设成TRUE时,cookie仅在安全的连接中被设置,默认值为FALSE)setCookie($ck_Var,$ck_Value,$ck_Time,$db_ckpath,$db_ckdomain,$S);}//取cookie中的某变量值functionGetCookie($Var){//_COOKIE通过HTTPcookies传递的变量组成的数组。是自动全局变量。return$_COOKIE[$Var];}//对处在ip封禁列表中的ip禁止登陆functionIpban(){//声明全局变量IP封禁列表$db_ipban,客户端ip$onlineip,图片目录$imgpath,风格图片文件路径$stylepathglobal$db_ipban,$onlineip,$imgpath,$stylepath;//如果ip封禁列表不为空if($db_ipban){ //以","分割 $baniparray=explode(",",$db_ipban); foreach($baniparrayas$banip){  //ip为空继续下个循环  if(!$banip)continue;  //去掉变量中的空格  $banip=trim($banip);  //如果客户端ip在被封禁列表中  if(strpos(','.$onlineip.'.',','.$banip.'.')!==false){   //转页面显示语言文件中ip_ban对应键值的提示信息    Showmsg('ip_ban');  } }}}//删除文件functionP_unlink($filename){//判断是否$filename是否包含..,包含则退出显示Forbiddenstrpos($filename,'..')!==false&&exit('Forbidden');//unlink--删除文件@unlink($filename);}//读取文件内容functionreadover($filename,$method="rb"){//由于strpos函数返回是整数值,所以使用!==(不全等)符号判断是否$filename是否包含..,包含则退出显示Forbiddenstrpos($filename,'..')!==false&&exit('Forbidden');//fopen--打开文件或者URL,//mode说明//'r'只读方式打开,将文件指针指向文件头。//'r+'读写方式打开,将文件指针指向文件头。//'w'写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。//'w+'读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。//'a'写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。//'a+'读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。//'x'创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,//并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建之。这和给底层的open(2)系统调//用指定O_EXCL|O_CREAT标记是等价的。此选项被PHP4.3.2以及以后的版本所支持,仅能用于本地文//件。//'x+'创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回//FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建之。这和给底层的open//(2)系统调用指定O_EXCL|O_CREAT标记是等价的。此选项被PHP4.3.2以及以后的版本所支持,仅能用//于本地文件。//@为错误运算符。当将其放置在一个PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。//以读方式打开文件,并将返回的资源(resource)保存在$handle变量中if($handle=@fopen($filename,$method)){ //flock--轻便的咨询文件锁定 //flock()操作的handle必须是一个已经打开的文件指针。operation可以是以下值之一:LOCK_SH取得共享锁定、LOCK_EX取得独占锁定、LOCK_UN释放锁定、LOCK_NB不希望flock()在锁定时堵塞 flock($handle,LOCK_SH); //filesize返回文件字节数 //fread()从文件指针handle读取最多length个字节(这里为全部),返回类型为string $filedata=@fread($handle,filesize($filename)); //fclose--关闭一个已打开的文件指针 fclose($handle);}//返回文件内容return$filedata;}//写入文件functionwriteover($filename,$data,$method="rb+",$iflock=1,$check=1,$chmod=1){//Copyright(c)2003-06PHPWind//判断是否$filename是否包含..,包含则退出显示Forbidden$check&&strpos($filename,'..')!==false&&exit('Forbidden');//touch--设定文件的访问和修改时间touch($filename);//以读写方式打开文件,并将返回的资源(resource)保存在$handle变量中$handle=fopen($filename,$method);if($iflock){ flock($handle,LOCK_EX);}//fwrite--写入文件(可安全用于二进制文件)fwrite($handle,$data);//ftruncate--将文件截断到给定的长度if($method=="rb+")ftruncate($handle,strlen($data));fclose($handle);//chmod--改变文件模式//mode参数包含三个八进制数按顺序分别指定了所有者、所有者所在的组以及所有人的访问限制。每一部分都可以通过加入所需的权限来计算出所要的权限。数字1表示使文件可执行,数字2表示使文件可写,数字4表示使文件可读。$chmod&&@chmod($filename,0777);} //打开文件,返回文件数组functionopenfile($filename){//读取文件内容$filedata=readover($filename);//做相应替换$filedata=str_replace(" "," ",$filedata);//以""分割,相当于每行一个数组元素$filedb=explode("",$filedata);//count--计算数组中的单元数目或对象中的属性个数,返回var中的单元数目,通常是一个array,任何其它//类型都只有一个单元。对于对象,如果安装了SPL,可以通过实现Countable接口来调用count()。该接口//只有一个方法count(),此方法返回count()函数的返回值。如果var不是数组类型或者实现了Countable//接口的对象,将返回1,有一个例外,如果var是NULL则结果是0。注:可选的mode参数自PHP//4.2.0起可用。如果可选的mode参数设为COUNT_RECURSIVE(或1),count()将递归地对数组计//数。对计算多维数组的所有单元尤其有用。mode的默认值是0。count()识别不了无限递归。count()对没//有初始化的变量返回0,但对于空的数组也会返回0。用isset()来测试变量是否已经初始化。$count=count($filedb);//如果数组最后一个元素为空或者为"r",销毁此元素if($filedb[$count-1]==''||$filedb[$count-1]=="r"){unset($filedb[$count-1]);}//empty--检查一个变量是否为空,如果var是非空或非零的值,则empty()返回FALSE。换句话说,//""、0、"0"、NULL、FALSE、array()、var$var;以及没有任何属性的对象都将被认为是空的,如果var//为空,则返回TRUE。除了当变量没有置值时不产生警告之外,empty()是(boolean)var的反义词。if(empty($filedb)){$filedb[0]="";}//返回文件数组return$filedb;}//更新在线信息functionUpdate_ol(){global$runfc;if($runfc=='Y'){ //声明全局变量在在线文件中的偏移量$ol_offset,用户id$winduid,是否开启IP统计$db_ipstates,是否修改$isModify global$ol_offset,$winduid,$db_ipstates,$isModify; //如果用户id存在  if($winduid!=''){  //更新在线会员文件  list($alt_offset,$isModify)=addonlinefile($ol_offset,$winduid); }else{  //更新在线游客文件  list($alt_offset,$isModify)=addguestfile($ol_offset); } //如果返回的文件中偏移量和当前cookie中的不同,更新该cookie if($alt_offset!=$ol_offset)Cookie('ol_offset',$alt_offset,0); //重置是否更新在线信息标记为空 $runfc=''; //如果开启ip统计且 //(cookie中ipstate信息为空且修改标记为是或 //cookie中ipstate信息存在但其小于今日开始时间) if($db_ipstates&&((!GetCookie('ipstate')&&$isModify===1)||(GetCookie('ipstate')&&GetCookie('ipstate')[/color][color=#0066ff]$GLOBALS['tdtime']))){  //包含require/ipstates.php,若有重复,略过  require_once(R_P.'require/ipstates.php'); }}}//页脚处理显示函数functionfooter(){//声明全局变量数据库访问类$db,是否开启GZIP压缩输出$db_obstart,是否在页脚显示程序运行时间$db_footertime,是否开启静态目录部署功能$db_htmifopen,当前时间秒数$P_S_T,头部和尾部表格宽度$mtablewidth,联系我们URL$db_ceoconnect,PHPWind版本$wind_version,图片目录$imgpath,此风格在image目录下的文件夹名称$stylepath,页脚广告$footer_ad,论坛联盟广告$db_union,当前时间$timestampglobal$db,$db_obstart,$db_footertime,$db_htmifopen,$P_S_T,$mtablewidth,$db_ceoconnect,$wind_version,$imgpath,$stylepath,$footer_ad,$db_union,$timestamp;//更新在线信息Update_ol();//如果访问类不为空if($db){ //记录查询次数 $qn=$db->query_num;}//显示是否开始gzip压缩$ft_gzip=($db_obstart==1?"Gzipenabled":"Gzip disabled").$db_union[3];//如果设置了允许在页脚显示程序运行时间if($db_footertime==1){ $t_array=explode('',microtime()); //number_format按照千分制划分数字,stringnumber_format(floatnumber[,intdecimals[, //stringdec_point,stringthousands_sep]])它接受一个、两个或四个参数,不接受三个;给 //定一个将没有十进制.点号,只有千分制,逗号;两个,具有十进制的.点号和千进制的,句号;四个,十进 //制、千进制全部用,都好划分;注:仅千进制的第一个字符被使用;例如,你使用foo作为千进制的区分,那 //么1000就成为1f000; $totaltime=number_format(($t_array[0]+$t_array[1]-$P_S_T),6); $wind_spend="Total$totaltime(s)query$qn,";}//按格式取当前时间$ft_time=get_date($timestamp,'m-dH:i');//包含对应风格目录下的footer.htm文件includePrintEot('footer');//ob_get_contents返回输出缓存的内容,如输出缓存未被激活,将返回缓存内容或Flase;$output=str_replace(array('',''),array('',''),ob_get_contents());//如果开启静态目录功能if($db_htmifopen){ //preg_replace--执行正则表达式的搜索和替换,mixedpreg_replace(mixedpattern,mixed //replacement,mixedsubject[,intlimit])在subject中搜索pattern模式的匹配项并替换为 //replacement。如果指定了limit,则仅替换limit个匹配,如果省略limit或者其值为-1,则所有的匹配项 //都会被替换。replacement可以包含 形式或(自PHP4.0.4起)$n形式的逆向引用,首选使用后者。 //每个此种引用将被替换为与第n个被捕获的括号内的子模式所匹配的文本。n可以从0到99,其中{content}或 //{post.content}指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从1开始)以取得子模式的数目。对替换模式 //在一个逆向引用后面紧接着一个数字时(即:紧接在一个匹配的模式后面的数字),不能使用熟悉的符号 //来表示逆向引用。举例说,将会使preg_replace()搞不清楚是想要一个的逆向引用后面跟着一个 //数字1还是一个的逆向引用。本例中的解决方法是使用1。这会形成一个隔离的逆向引用, //而使另一个1只是单纯的文字。  $output=preg_replace(  "/]+s*)href=(["|']?)([^"'>s]+.php?[^"'>s]+)(["|']?)/ies",  "Htm_cv('',',  $output );}ob_end_clean();$db_obstart==1?ob_start('ob_gzhandler'):ob_start();echo$output;//flush--刷新输出缓冲,刷新PHP程序的缓冲,而不论PHP执行在何种情况下(CGI,web服务器等等)。该//函数将当前为止程序的所有输出发送到用户的浏览器。flush()函数不会对服务器或客户端浏览器的缓存模式产//生影响。因此,必须同时使用ob_flush()和flush()函数来刷新输出缓冲。个别web服务器程序,特别是//Win32下的web服务器程序,在发送结果到浏览器之前,仍然会缓存脚本的输出,直到程序结束为止。有些//Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送//到客户端浏览器。甚至浏览器也会在显示之前,缓存接收到的内容。例如Netscape浏览器会在接受到换行//或html标记的开头之前缓存内容,并且在接受到标记之前,不会显示出整个表格。一些版本的//MicrosoftInternetExplorer只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的//空格来让这些浏览器显示页面内容。flush;exit;}//返回静态目录功能开始时页面的访问路径functionHtm_cv($url,$tag){//声明全局变量静态目录$db_dir,静态目录扩展名设置$db_extglobal$db_dir,$db_ext;//ereg--正则表达式匹配,注:使用Perl兼容正则表达式语法的preg_match()函数通常是比ereg()更快//的替代方案。以区分大小写的方式在string中寻找与给定的正则表达式pattern所匹配的子串。如果找到与//pattern中圆括号内的子模式相匹配的子串并且函数调用给出了第三个参数regs,则匹配项将被存入regs//数组中。$regs[1]包含第一个左圆括号开始的子串,$regs[2]包含第二个子串,以此类推。$regs[0]包含//整个匹配的字符串。注:直到PHP4.1.0为止,$regs将被填充为正好十个单元,即使实际匹配的子串少于十 //个。这并不影响ereg()匹配更多子串的能力。如果没有找到匹配,则$regs不会被ereg()更改。如果在//string中找到pattern模式的匹配则返回TRUE,如果没有找到匹配或出错则返回FALSE。诚信为人2006-06-1101:48if(ereg("^http|ftp|telnet|mms|rtsp|admin.php|rss.php",$url)===false){ if(strpos($url,'#')!==false){  $add=substr($url,strpos($url,'#')); } $url=str_replace(  array('.php?','=','&',$add),  array($db_dir,'-','-',''),  $url ).$db_ext.$add;}return$tag.$url.'"';}//取得用户信息数组functionUser_info(){//声明全局变量数据库访问类$db,当前时间$timestamp,在线用户时限$db_onlinetime,用户id$winduid,用户密码$windpwd,是否记录会员在线时间并在版块内显示$db_ifonlinetime,用户此次在线时间$c_oltime,客户端ip$onlineip,是否开启IP验证功能$db_ipcheck,今日开始时间$tdtime;global$db,$timestamp,$db_onlinetime,$winduid,$windpwd,$db_ifonlinetime,$c_oltime,$onlineip,$db_ipcheck,$tdtime;$ct='';//取得数据表中的相应记录//相关字段名解释如下://用户id-m.uid,//用户名-m.username,//用户密码-m.password,//用户邮箱-m.email,//用户qq号-oicq,//用户系统组id-m.groupid,//用户会员组id-m.memberid,//用户注册时间-m.regdate,//用户时区设置-m.timedf,//用户风格设置-m.style,//用户时间显示格式设置-m.datefm,//主题列表每页个数-m.t_num, //文章列表每页个数-m.p_num,//是否已激活-m.yz,//是否有新的短消息-m.newpm,//是否开启签名展示功能-m.showsign,//用户交易帐号信息-m.payemail//用户发帖数-md.postnum,//用户威望数-md.rvrc,//用户金钱数-md.money,//用户自定义积分数-md.credit,//用户交易币数-md.currency,//用户上次访问时间-md.lastvisit,//用户这次访问时间-md.thisvisit,//用户在线时间-md.onlinetime,//用户上次回复时间-md.lastpost,//用户今日发帖数-md.todaypost,//用户在线ip情况-md.onlineip,//用户上传时间-md.uploadtime,//用户上传数-md.uploadnum,//使用所见即所得编辑器还是windcode编辑器-md.editor,//签名使用起始时间-md.starttime$detail=$db->get_one("SELECTm.uid,m.username,m.password,m.email,oicq,m.groupid,m.memberid,m.regdate,m.timedf,m.style,m.datefm,m.t_num,m.p_num,m.yz,m.newpm,m.showsign,m.payemail,md.postnum,md.rvrc,md.money,md.credit,md.currency,md.lastvisit,md.thisvisit,md.onlinetime,md.lastpost,md.todaypost,md.onlineip,md.uploadtime,md.uploadnum,md.editor,md.starttimeFROMpcr_membersmLEFTJOINpcr_memberdatamdUSING(uid)WHEREm.uid='$winduid'");//如果用户登陆ip字段中不存在当前客户端ip信息if(strpos($detail['onlineip'],$onlineip)===false){ //以"."分割客户端ip $iparray=explode(".",$onlineip); //如果用户登陆ip字段中不存在当前客户端ip的前2节则退出标记设为Y if(strpos($detail['onlineip'],$iparray[0].'.'.$iparray[1])===false)$loginout='Y';}//如果查询不到该会员信息即$detail为空//或者用户密码在编码后和cookie中保存的值不相同//或者退出标记为Y且论坛开启了IP验证功能if(!$detail||PwdCode($detail['password'])!=$windpwd||($loginout=='Y'&&$db_ipcheck==1)){ //销毁$detail unset($detail);  //设置当前用户组为游客 $GLOBALS['groupid']='guest'; //包含require/checkpass.php文件,如果其中有重复包含,略过 require_once(R_P.'require/checkpass.php'); //退出并清空cookies Loginout(); //转页面显示语言文件中ip_change对应键值的提示信息 Showmsg('ip_change');}else{ //销毁用户信息中的密码变量 unset($detail['password']); //如果当前时间和数据库中用户这次访问时间差大于在线用户时限 if($timestamp-$detail['thisvisit']>$db_onlinetime){  //非隐身  if(!GetCookie('hideid')){   $ct="lastvisit=thisvisit,thisvisit='$timestamp'";   //更新数组中上次访问时间变量为这次访问时间   $detail['lastvisit']=$detail['thisvisit'];   //更新数组中这次访问时间变量为当前时间   $detail['thisvisit']=$timestamp;  }  //如果设置了记录会员在线时间并在版块内显示且ct变量不为空,且用户此次在线时间大于0  if($db_ifonlinetime==1&&$ct&&$c_oltime>0){   //如果用户此次在线时间大于在线用户时限的1.2倍   if($c_oltime>$db_onlinetime*1.2){    //更新用户此次在线时间为在线用户时限    $c_oltime=$db_onlinetime;   }   $ct.=",onlinetime=onlinetime+'$c_oltime'";   $c_oltime=0;  }  //若ct变量不为空,则更新数据库中的上次访问时间、这次访问时间、在线时间  $ct&&$db->update("UPDATEpcr_memberdataSET$ctWHEREuid='$winduid'AND$timestamp-thisvisit>$db_onlinetime"); }}//返回用户信息数组return$detail;}//返回pwd的编码后值functionPwdCode($pwd){ //连接头信息、$pwd参数(密码)以及论坛安全验证参数,md5加密后返回该值returnmd5($_SERVER["HTTP_USER_AGENT"].$pwd.$GLOBALS['db_hash']);}//安全检测,若不符合销毁相应cookie,符合重新设置相应cookiefunctionSafeCheck($CK,$PwdCode,$var='AdminUser',$expire=1800){//声明全局变量$timestampglobal$timestamp;//上次访问时间和当前时间的时间差赋于变量$t$t=$timestamp-$CK[0];//如果其超过定义的过期时间或者$CK[2]中存储的密码(编码后的密码连接上次访问时间再md5加密后得到的值)并不匹配if($t>$expire||$CK[2]!=md5($PwdCode.$CK[0])){ //设置$var状态为无效,即销毁此cookie Cookie($var,'',0); returnfalse;}else{ //设置上次访问时间为当前时间 $CK[0]=$timestamp; //设置存储的密码信息为编码后的密码连接当前时间再md5加密后得到的值 $CK[2]=md5($PwdCode.$timestamp); //implode联结数组元素为一个字符串;stringimplode(stringglue,arraypieces)第一个参数为分割符 //第二个参数为要联结的数组单元; //用"t"连接数组$CK $Value=implode("t",$CK); //设置变量$$var为$Value编码后的值 $$var=StrCode($Value); Cookie($var,StrCode($Value)); returntrue;}}//对字符串进行编码或解码处理,并返回编码或解码后得到的值functionStrCode($string,$action='ENCODE'){//HTTP_USER_AGENT-当前请求的User-Agent:头信息的内容。该字符串表明了访问该页面的用户代理的信息。一个典型的例子是:Mozilla/4.5[en](X11;U;Linux2.2.9i586)。也可以使用get_browser()得到此信息。//连接头信息和论坛安全验证参数,md5加密后,从第8位起取18个字符,作为变量key的值$key=substr(md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS['db_hash']),8,18);//base64_decode--对使用MIMEbase64编码的数据进行解码//如果选择的操作是编码操作,则string变量不变仍旧为自己本身参数的值,否则为base64解码该参数后得到的值 $string=$action=='ENCODE'?$string:base64_decode($string);//记录key的长度,为18$len=strlen($key);$code='';//对string中的每个字符for($i=0;$i[/color][color=#0000ff]strlen($string);$i++){ //k变量存储$i%$len余数 $k=$i%$len; //位运算符允许对整型数中指定的位进行置位。如果左右参数都是字符串,则位运算符将操作字符的ASCII值。 //$a^$bXor(按位异或)将把$a和$b中不同的位设为1。 //把$string[$i]和$key[$k]以ascii值方式进行异或运算后,值累加到code变量中 $code.=$string[$i]^$key[$k];}//base64_encode--使用MIMEbase64对数据进行编码//设计此种编码是为了使二进制数据可以通过非纯8-bit的传输层传输,例如电子邮件的主体。//Base64-encoded数据要比原始数据多占用33%左右的空间。//如果选择的操作是加码操作,则code变量不变,否则为base64编码code后得到的值$code=$action=='DECODE'?$code:base64_encode($code);return$code;}//返回$content字符串$length长度的值,超过$length显示".."functionsubstrs($content,$length){//取字符集设置global$db_charset;if($length&&strlen($content)>$length){ if($db_charset!='utf-8'){  $retstr='';  for($i=0;$i[/color]$length[color=#0000ff]-2;$i++){   //ord返回字符串的第一个字符的二进制值;stringchr(intascii)返回相对应于ascii所指定的单个字符。   $retstr.=ord($content[$i])>127?$content[$i].$content[++$i]:$content[$i];  }  return$retstr.'..'; }else{  //trim去除字符串里的空格或其他字符,stringtrim(stringstr[,stringcharlist]),  //""(ASCII32(0x20)),空格."t"(ASCII9(0x09)),tab字符." "(ASCII10(0x0A)),换行符;  //"r"(ASCII13(0x0D)),回车符."{post.content}"(ASCII0 (0x00)),空字符."x0B"(ASCII11(0x0B)),垂直tab.  returnutf8_trim(substr($content,0,$length)).'..'; }}return$content;}//将非utf8字符集字符串取整字符串避免乱码functionutf8_trim($str){$len=strlen($str);for($i=strlen($str)-1;$i>=0;$i-=1){ $hex.=''.ord($str[$i]); $ch=ord($str[$i]); if(($ch&128)==0)returnsubstr($str,0,$i); if(($ch&192)==192)returnsubstr($str,0,$i);}return($str.$hex);}//按格式返回时间functionget_date($timestamp,$timeformat=''){//声明全局变量论坛默认时间显示格式$db_datefm,默认时区设置$db_timedf,用户时间显示格式$_datefm,用户时区设置$_timedfglobal$db_datefm,$db_timedf,$_datefm,$_timedf;//如果传入参数设定了时间格式,则时间格式取参数中设定的值,否则看是否用户设置了时间显示格式,有则取用户的时间显示格式,否则取论坛默认时间显示格式$date_show=$timeformat?$timeformat:($_datefm?$_datefm:$db_datefm);//取得时区设置(用户没设置取论坛默认的)if($_timedf){ $offset=$_timedf=='111'?0:$_timedf;}else{ $offset=$db_timedf=='111'?0:$db_timedf;}//按格式返回真实的用户显示时间returngmdate($date_show,$timestamp+$offset*3600);}//递归执行,使得每个数组中的字符串都是为了数据库查询语句等的需要在某些特殊字符前加上了反斜线的字符串functionAdd_S(&$array){foreach($arrayas$key=>$value){ if(!is_array($value)){  //addslashes--使用反斜线引用字符串,返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加  //上了反斜线。这些字符是单引号(')、双引号(")、反斜线()与 NUL(NULL字符)。一个使用  //addslashes()的例子是当你要往数据库中输入数据时。例如,将名字O'reilly插入到数据库中,这就需要对  //其进行转义。大多数据库使用作为转义符:O'reilly。这样可以将数据放入数据库中,而不会插入额外的。  //当PHP指令magic_quotes_sybase被设置成on时,意味着插入'时将使用'进行转义。默认情况下,  //PHP指令magic_quotes_gpc为on,它主要是对所有的GET、POST和COOKIE数据自动运行  //addslashes()。不要对已经被magic_quotes_gpc转义过的字符串使用addslashes(),因为这样会导致  //双层转义。遇到这种情况时可以使用函数get_magic_quotes_gpc()进行检测。  $array[$key]=addslashes($value); }else{  Add_S($array[$key]); }}}//对字符中的特殊字符进行转义,并返回转换后的字符串functionChar_cv($msg){$msg=str_replace('&','&',$msg);$msg=str_replace('','',$msg);$msg=str_replace('"','"',$msg);$msg=str_replace("'",''',$msg);$msg=str_replace(",",$msg);$msg=str_replace(">",">",$msg);$msg=str_replace("t"," ",$msg);$msg=str_replace("r","",$msg);$msg=str_replace(""," ",$msg);return$msg;}//认证码检查函数functionGdConfirm($code){//销毁cookie中的cknumCookie('cknum','',0);if(!$code||!SafeCheck(explode("t",StrCode(GetCookie('cknum'),'DECODE')),$code,'cknum',1800)){ //转页面显示语言文件中check_error对应键值的提示信息 Showmsg('check_error');}}//广告初始化函数 functionAdvertInit($SCR,$fid){//声明全局变量当前时间$timestampglobal$timestamp;//包含data/bbscache/advert_data.phpinclude(D_P.'data/bbscache/advert_data.php');$newadvert=array();foreach($advertdbas$key=>$val){ foreach($valas$k=>$v){  //strtotime--将任何英文文本的日期时间描述解析为Unix时间戳,本函数预期接受一个包含美国英语日期格  //式的字符串并尝试将其解析为Unix时间戳(自January1197000:00:00GMT起的秒数),其值相对于  //now参数给出的时间,如果没有提供此参数则用系统当前时间。本函数将使用TZ环境变量(如果有的话)来  //计算时间戳。自PHP5.1.0起有更容易的方法来定义时区用于所有的日期/时间函数。此过程在  //date_default_timezone_get()函数页面中有说明。注:如果给定的年份是两位数字的格式,则其值0-69  //表示2000-2069,70-100表示1970-2000。参数time被解析的字符串,格式根据GNUDate  //InputFormats语法now用来计算返回值的时间戳返回值成功则返回时间戳,否则返回FALSE。  //在PHP5.1.0之前本函数在失败时返回-1。php5.1.0失败时返回FALSE,不再是-1。  //如果是头部横幅广告或者底部横幅广告且结束时间为空  //或者结束时间小于当前时间  if(($key=='header'||$key=='footer')&&!$v['endtime']||strtotime($v['endtime'])[/color]$timestamp[color=#000099]){   //跳出执行下个循环   continue;  }  //如果是首页且投放范围为首页  if($SCR=='index'&&strpos(",$v[fid],",",-1,")!==false){   $newadvert[$key][]=$v;  //如果是板块且投放范围为主题列表页面  }elseif($SCR=='thread'&&strpos(",$v[fid],",",-2,")!==false){   $newadvert[$key][]=$v;  //如果是帖子且投放范围为帖子页面  }elseif($SCR=='read'&&strpos(",$v[fid],",",-3,")!==false){   $newadvert[$key][]=$v;  //如果投放范围为所有页面  }elseif(strpos(",$v[fid],",",-4,")!==false){   $newadvert[$key][]=$v;  //如果板块fid不为空投放范围包含该板块   }elseif($fid&&strpos(",$v[fid],",",$fid,")!==false){   $newadvert[$key][]=$v;  } }}//返回广告数组return$newadvert;}//取路径,去除$path中的文件名functiongetdirname($path){if(strpos($path,'')!==false){ //strrpos查找匹配字符串出现的最后位置;没找到,返回False returnsubstr($path,0,strrpos($path,''));}elseif(strpos($path,'/')!==false){ returnsubstr($path,0,strrpos($path,'/'));}else{ return'/';}}?>datasql_config.phpQUOTE://此文件内容为论坛数据库配置信息,以及插件创始人信息/***以下变量需根据您的服务器说明档修改*/$dbhost='localhost';//数据库服务器$dbuser='root';//数据库用户名$dbpw='phpwind.net';//数据库密码$dbname='phpwind';//数据库名$database='mysql';//数据库类型$PW='pcr_';//表区分符$pconnect=0;//是否持久连接/*MYSQL编码设置如果您的论坛出现乱码现象,需要设置此项来修复请不要随意更改此项,否则将可能导致论坛出现乱码现象*/$charset='gbk';/***论坛创始人,拥有论坛所有权限*/ //创始人账号$manager='admin';//创始人md5加密密码$manager_pwd='21232f297a57a5a743894a0e4a801fc3';/***镜像站点设置*/$db_hostweb=1;//是否为主站点/**附件url地址例如:http://www.phpwind.net/attachment最后为附件目录*/$attach_url='';/***插件配置*/$db_hackdb=array(//插件名称唯一标识符前台文件名后台文件名是否启用(0不显示1下拉菜单显示2直接显示)相关文件(前台程序文件,后台程序文件,前台模板文件,后台模板文件)诚信为人2006-06-1101:48'bank'=>array('银行','bank','bank.php','bankset.php','1','hack/bank.php,hack/bankset.php,template/wind/bank.htm,template/admin/bankset.htm'),'colony'=>array('朋友圈','colony','colony.php','colonyset.php','1','hack/colony.php,hack/colonyset.php,template/admin/colonyset.htm,template/wind/colony.htm'),'advert'=>array('广告管理','advert','','advert.php','1','hack/advert.php'),'new'=>array('首页调用管理','new','','new.php','0','hack/new.php'),'medal'=>array('勋章中心','medal','medal.php','medalset.php','0','hack/medal.php,hack/medalset.php,template/wind/medal.htm,template/admin/medalset.htm'),'toolcenter'=>array('道具中心','toolcenter','toolcenter.php','toolsetting.php','0','hack/toolcenter.php,hack/toolsetting.php,template/wind/toolcenter.htm,template/admin/toolsetting.htm'),'blog'=>array('博客','blog','blog.php','blogset.php','0','hack/blog.php,hack/blogset.php,template/wind/blog.htm,template/admin/blogset.htm'),'live'=>array('网络电视','live','live.php','','2',''),); ?>databbscacheconfig.phpQUOTE://此文件内容为论坛核心设置,论坛程序修改的时候同时修改数据库和本文件//如果某些变量没有,说明还没有在后台保存过相应设置,本文件中的某些变量需要保存过相应设置才会存在//定时更改图片目录防止图片盗链(小时)$db_hour='20';//是否使用跨台固定图片链$db_http='N';//是否自动不定期更改图片链$db_autochange='0';//论坛状态:是否关闭$db_bbsifopen='1';//论坛关闭的原因$db_whybbsclose='论坛升级中...请等候15分钟';//论坛标题$db_bbsname='PHPwindBoard';//论坛地址$db_bbsurl='http://localhost/phpwind';//论坛标题(4.0.1以下版本使用)$db_wwwname='PHPwindStudio';//论坛地址(4.0.1以下版本使用)$db_wwwurl='http://localhost/phpwind';//联系我们URL:(出现在页尾)$db_ceoconnect='http://www.phpwind.net/sendemail.php?username=fengyu';//管理员信箱$db_ceoemail='[url=mailto:webmaster@phpwind.com]webmaster@phpwind.com[/url]';//分版块文章多少时间表示为新帖(3600=1小时)$db_newtime='3600';//签名中是否使用Wind代码功能$db_signwindcode='1';//签名中是否使用WindIMG功能$db_windpic['pic']='1';//签名中是否使用WindFlash功能$db_windpic['flash']='0';//签名中[img]标签的宽度大小控制$db_windpic['picwidth']='700';//签名中[img]标签的高度大小控制$db_windpic['picheight']='200';//签名中[size]标签的大小控制 $db_windpic['size']='3';//服务器时间校正(分),此功能用于校正服务器操作系统时间设置错误的问题,当确认论坛默认时区设置正确后,论坛显示时间仍有错误,请使用此功能校正$db_cvtime='0';//默认时区设置$db_timedf='8';//论坛文章列表每页显示主题数$db_perpage='20';//阅读一主题时每页显示帖子数$db_readperpage='10';//用户文章被回复是否发送邮件$db_replysendmail='0';//每篇文章的最大长度(字节)$db_postmax='50000';//帖子中是否使用WindIMG功能$db_windpost['pic']='1';//帖子中[img]标签的宽度大小控制$db_windpost['picwidth']='700';//帖子中[img]标签的高度大小控制$db_windpost['picheight']='';//帖子中[size]标签的大小控制$db_windpost['size']='5';//帖子中是否使用WindFlash功能$db_windpost['flash']='0';//4.0.1以下版PHPWind参数,含义不明$db_indexnotice='1';//post回复时显示提示旧帖数$db_showreplynum='5';//快捷回复帖子是否使用WindIMG功能$db_windreply['pic']='1';//快捷回复帖子是否使用WindFlash功能$db_windreply['flash']='0';//回复增加的威望值(4.0.1以下)$db_dtreplyrvrc='1';//刷新预防时间(多少秒间刷新被视为恶意刷新)$db_refreshtime='0';//在线用户时限(多少分钟内有动作视为在线)$db_onlinetime='3600';//是否在页脚显示程序运行时间$db_footertime='1';//版块内是否显示在线用户$db_threadonline='0';//上传附件大小上限(k)超管不受限制$db_uploadmaxsize='2048000' ;//上传附件允许后缀(空格隔开)$db_uploadfiletype='gifjpgrartxtzipswfjqf';//附件保存方式//0-默认(全部存入同一目录)//1-按版块存入不同目录//2-按类型存入不同目录//3-按月份存入不同目录//4-按天存入不同目录$db_attachdir='0';//一次最多上传附件个数$db_attachnum='4';//帖子中是否使用Wind(wmv,asf,ra,ram,rm)功能$db_windpost['mpeg']='1';//帖子中是否使用iframe功能$db_windpost['iframe']='0';//以下四项为4.0.1以下版PHPWind发表帖子以及回复增加的威望和金钱$db_dtpostrvrc='10';$db_dtpostmoney='5';$db_dtjhrvrc='50';$db_dtjhmoney='5';//最大在线人数$db_onlinelmt='0';//以下三项为4.0.1以下版PHPWind删除帖子以及回复减少的威望和金钱$db_dtdelrvrc='10';$db_dtdelrprvrc='10';$db_dtdelmoney='5';//首页是否显示在线用户$db_indexonline='1';//是否使用自动跳转$db_ifjump='1';//是否打开注册提示窗$db_regpopup='0';//是否记录会员在线时间并在版块内显示$db_ifonlinetime='0';//首页是否显示在线游客$db_showguest='0';//回收站ID$db_recycle='3';//首页是否显示今天生日会员$db_indexshowbirth='0';//GZIP压缩输出:选择是将允许论坛通过gzip输出页面,可以很明显的降低带宽需求,但只有在客户端支持的情况下才可使用,并会加大服务器系统开销$db_obstart='1';//是否显示友情链接 $db_indexlink='1';//是否滚动显示友情链接$db_indexmqshare='0';//默认论坛风格$db_defaultstyle='wind';//COOKIE有效目录,使一个空间放置多个论坛,都能访问!$db_ckpath='/';//COOKIE有效域名$db_ckdomain='';//以下两项为4.0.1以下版PHPWind参数,含义不明$db_windreadable='1';$db_schpernum='10000';//各分版块帖子导航里是否显示表情符$db_threademotion='0';//是否显示今日昨日发帖数$db_todaypost='0';//各分版块帖子里是否显示快速发表主题$db_threadshowpost='0';//自定义首页各版块的图片logo//0-不使用//1-默认//2-自定义$db_indexfmlogo='2';//是否使用自动贴图$db_autoimg='1';//每篇文章的最小长度(字节)$db_postmin='3';//投票选项个数控制$db_selcount='15';//浏览帖子处是否显示会员IP来源$db_ipfrom='1';//回复增加的金钱值(4.0.1以下)$db_dtreplymoney='1';//是否开启IP验证功能:可以加强论坛安全,选择开启将对登录者ip进行验证,如果与上一次登录ip前2位不同,将要求重新登录$db_ipcheck='0';//是否统计今日到访会员$db_today='0';//注册会员在多少时间内不能发表文章(小时)$db_postallowtime='0';//阅读帖子时是否显示在线用户$db_showonline='1';//IP封禁列表$db_ipban='' ;//4.0.1以下版PHPWind参数,含义不明$db_ifcheck='1';//是否允许用户使用宣传代码$db_ads='1';//点击率延迟更新功能(小时)$db_hithour='0';//4.0.1以下版PHPWind参数,含义不明$db_upgrade='1';//是否开启进程优化$db_lp='0';//是否开启总置顶,分类置顶功能$db_topped='0';//是否开启新消息声音提示$db_msgsound='0';//论坛默认时间显示格式//格式如:yyyy-mm-dd,yy-m-d//yyyy代表4位数年份,yy代表2位数年份//mm代表有前导零01-12,m代表没前导零1-12//dd代表有前导零01-31,d代表没前导零1-3$db_datefm='Y-m-dH:i';//认证码功能(4.0以前)$db_lgck='0';//论坛首页调用文件$db_bfn='index.php';//以下两项为4.0.1以下版PHPWind参数,含义不明$db_hfn='bbs';//4.0.1一下版本使用作用不明$db_cfn='c_index.php';//参与在线显示的用户组$db_showgroup=',3,4,5,16,';//是否开启头像上传功能头像高度头像宽度头像大小$db_upload='120018020480';//是否使用附件上传功能$db_allowupload='1';//是否使用下拉框方式显示版主$db_adminshow='0';//主题列表最大显示页数$db_maxpage='1000';//用户列表最大页数$db_maxmember='1000';//标题最大长度$db_titlemax='100';//货币名称货币单位威望名称威望单位贡献值名称贡献值单位$db_credits='金钱RMB威望点贡献值点' ;//4.0.1以下版PHPWind参数,含义不明$db_savecheck='1';//论坛安全验证参数:除非论坛出现安全危机,请不要随意修改$db_hash='89Y**4^M*l';//搜索查询的最大结果数$db_maxresult='500';//帖子奖惩设置//数组经过serialize函数做序列化操作,使用时需用unserialize解序列化操作使用//精华一个主题增加、发布一个主题增加、回复一个主题增加、取消精华主题减少、删除一个主题减少、删除一个回复减少的威望情况//s:4:"rvrc";a:6:{s:6:"Digest";i:20;s:4:"Post";i:10;s:5:"Reply";i:10;s:8:"Undigest";i:20;s:6:"Delete";i:10;s:8:"Deleterp";i:10;}//精华一个主题增加、发布一个主题增加、回复一个主题增加、取消精华主题减少、删除一个主题减少、删除一个回复减少的金钱情况//s:5:"money";a:6:{s:6:"Digest";i:20;s:4:"Post";i:10;s:5:"Reply";i:10;s:8:"Undigest";i:20;s:6:"Delete";i:10;s:8:"Deleterp";i:10;}//精华一个主题增加、发布一个主题增加、回复一个主题增加、取消精华主题减少、删除一个主题减少、删除一个回复减少的好评度情况//i:1;a:6:{s:6:"Digest";i:0;s:4:"Post";i:0;s:5:"Reply";i:0;s:8:"Undigest";i:0;s:6:"Delete";i:0;s:8:"Deleterp";i:0;}$db_creditset='a:3:{s:4:"rvrc";a:6:{s:6:"Digest";i:20;s:4:"Post";i:10;s:5:"Reply";i:10;s:8:"Undigest";i:20;s:6:"Delete";i:10;s:8:"Deleterp";i:10;}s:5:"money";a:6:{s:6:"Digest";i:20;s:4:"Post";i:10;s:5:"Reply";i:10;s:8:"Undigest";i:20;s:6:"Delete";i:10;s:8:"Deleterp";i:10;}i:1;a:6:{s:6:"Digest";i:0;s:4:"Post";i:0;s:5:"Reply";i:0;s:8:"Undigest";i:0;s:6:"Delete";i:0;s:8:"Deleterp";i:0;}}';//是否允许快速编辑主题(实现不刷新页面提交数据,只有管理人员有权限)$db_ajaxsubject='1';//是否允许快速编辑主题内容(实现不刷新页面提交数据,管理人员和作者有权限)$db_ajaxcontent='1';//是否为DEBUG模式运行论坛:不屏蔽程序报错信息,论坛出现异常时打开此模式,将错误信息提交给程序开发商,以便尽快得到解决$db_debug='0';//是否开启注册认证码功能前台登录认证码功能发帖认证码功能短消息认证码功能其它认证码功能后台登录认证码功能$db_gdcheck='000000';//签名显示一天需要交易币个数$db_signmoney='0';//需要购买签名显示的用户组$db_signgroup=',5,6,7,16,8,9,10,11,12,13,14,15,';//是否使用图片水印功能$db_watermark='0' ;//水印位置//0-随机位置//1-顶部居左//2-顶部居中//3-顶部居右//7-中心位置//4-底部居左//5-底部居中//6-底部居右$db_waterpos='1';//水印图片文件名.水印图片存放路径:$imgpath/water,如果水印图片不存在,则使用文字水印$db_waterimg='mark.gif';//水印图片文字$db_watertext='http://www.phpwind.net';//水印图片文字字体大小$db_waterfont='5';//水印图片文字颜色(十六进制颜色值,默认为#FF0000:红色)$db_watercolor='#0000FF';//水印透明度,该值决定图片水印清晰度,其值范围从0到100。$db_waterpct='85';//帖子中表情,动作以及img,wmv,rm等标签的最多转换次数$db_cvtimes='30';//二级目录/域名功能0-不使用1-直接访问2-二级域名访问$db_forumdir='0';//是否使用远程附件连接设置$db_attachurl='N';//4.0.1以下版PHPWind参数,含义不明$db_kijiji='1';//管理操作原因:显示在前台管理操作的操作原因备选框中,操作者可自行输入或选择一个操作原因,操作原因将包含在用户通知消息和后台管理操作记录中每行填写一个操作原因,空行显示为分隔符“-------”$db_adminreason='广告帖恶意灌水非法内容与版规不符重复发帖优秀文章原创内容';//默认编码设置$db_charset='gbk';//CC攻击防护设置0-不使用1-普通模式2-加强模式$db_cc='0';//是否开启JS调用此功能允许在您的网站首页或其他地方调用论坛的内容 调用方式分为:版块调用、公告调用、基本信息调用、会员排行调用、文章调用。$db_jsifopen='0';//缓存更新时间(秒)$db_jsper='600';//允许调用网站域名$db_bindurl='';//是否在帖子页面显示用户加入的{$db_hackdb[colony][0]}(指朋友圈,名称根据论坛设置变化)$db_showcolony='0';//选择要在阅读帖子页面(read.php)显示的自定义积分$db_showcustom=',1,';//是否显示文章系统$db_showcms='0';//文章系统是否打开$db_cmsifopen='0';//文章系统关闭原因$db_whycmsclose='文章系统关闭中,请从顶部链接进入社区';诚信为人2006-06-1101:49//论坛联盟广告$db_union='a:0:{}';//是否开启静态目录部署功能$db_htmifopen='0';//静态目录$db_dir='.php?';//静态目录扩展名设置$db_ext='.html';//是否开启定时打开与关闭论坛发贴设置发言开启于(点)发言关闭于(点)$db_openpost='112';//Meta关键词为所有页面输入Meta关键词,让搜索引擎更容易找到您的论坛.$db_metakeyword='admin';//Meta描述为所有页面输入Meta描述,以便能够在搜索引擎中正确搜索到您的论坛.$db_metadescrip='admin';//是否开启定时打开与关闭论坛搜索功能搜索开启于(点)搜索关闭于(点)$db_opensch='112';//添加水印的图片大小控制只对超过程序设置的大小的附件图片才加上水印图片或文字(设置为0不限制)//宽度$db_waterwidth='';//是否开启WAP功能$db_wapifopen='0' ;//添加水印的图片大小控制只对超过程序设置的大小的附件图片才加上水印图片或文字(设置为0不限制)//高度$db_waterheight='';//WAP页面长度控制$db_waplimit='';//是否开启IP统计$db_ipstates='1';?>datagroupdbgroup_3.phpQUOTE://此文件内容为管理员组配置文件//后台会员组设置后更新数据库的同时更新此文件//本文件中的某些变量需要保存过相应设置才会存在//用户组id$gp_gid='3';//用户组类别system系统组,default默认组,member会员组,special特殊组$gp_gptype='system';//用户组头衔$gp_grouptitle='管理员';//等级图片号$gp_groupimg='3';//升级点数需求$gp_grouppost='0';//最大短消息数$gp_maxmsg='100';//是否允许隐身登录$gp_allowhide='1';//是否允许浏览帖子$gp_allowread='1';//是否允许用户使用自定义头像$gp_allowportait='1';//是否允许用户使用头像上传功能$gp_upload='1';//是否允许回复主题$gp_allowrp='1';//是否允许自定义荣誉头衔$gp_allowhonor='1';//是否允许删除自己的帖子$gp_allowdelatc='1';//是否允许发表主题$gp_allowpost='1' ;//是否允许发起投票$gp_allownewvote='1'//是否允许参与投票;$gp_allowvote='1';//是否允许发html帖$gp_htmlcode='1';//是否允许使用所见即所得编辑器$gp_wysiwyg='1';//是否允许发隐藏帖$gp_allowhidden='1';//是否允许发加密帖$gp_allowencode='1';//是否允许发出售帖$gp_allowsell='1';//搜索权限控制0不允许使用搜索1只允许搜索主题2允许搜索主题和内容$gp_allowsearch='2';//是否允许查看会员列表$gp_allowmember='1';//是否允许查看会员资料$gp_allowprofile='1';//是否允许使用报告功能$gp_allowreport='1';//是否允许发送短消息$gp_allowmessege='1';//是否允许查看统计与排行$gp_allowsort='1';//是否允许使用主题排序(主题列表页面)$gp_alloworder='1';//是否允许上传附件$gp_allowupload='1';//是否允许下载附件$gp_allowdownload='1';//上传附件需要的威望值(4.0以前版本)$gp_allowloadrvrc='0';//一天最多上传附件个数$gp_allownum='50';//编辑时间约束(分钟)超过设定时间后拒绝用户编辑。留空或者键入0则没有约束$gp_edittime='0';//灌水预防(多少秒间隔内不能发帖,设为0则不做限制)$gp_postpertime='0';//两次搜索时间间隔(秒)$gp_searchtime='0';//个人签名最大字节数 $gp_signnum='1000';//上传附件被扣金钱为$gp_uploadmoney='0';$_G=array(//是否允许查看帖子操作记录(允许用户查看自己的帖子被操作情况)'atclog'=>'0',//是否允许使用展区功能'show'=>'1',//是否允许查看ip来源(如果论坛核心设置中关闭此功能,则此项设置无效)'viewipfrom'=>'1',//签名中的图片最大宽度(留空使用核心里的设置)'imgwidth'=>'',//签名中的图片最大高度(留空使用核心里的设置)'imgheight'=>'',//签名中[size]标签的最大值(留空使用核心里的设置)'fontsize'=>'',//是否允许使用“只接收特定用户组的短消息”的功能'msggroup'=>'1',//收藏夹容量'maxfavor'=>'100',//是否允许查看投票结果'viewvote'=>'1',//发表的文章是否需要管理员审核(此项只有是开启版块文章审核时有效)'atccheck'=>'1',//是否开启论坛评分权限(下面3项起作用的前提是开启此选项)//若开启版主评分权限,则版主在所有版块内都拥有评分权限,若关闭版主的评分权限,则版主只在自己管理的版块内拥有评分权限.'markable'=>'1',//每天最多允许发表多少篇帖子(设置为0不限制)'postlimit'=>'',//上传附件大小上限留空或设置为"0"使用论坛核心设置中的设置'uploadmaxsize'=>'0',//上传附件允许后缀(空格隔开)留空使用论坛核心设置中的设置'uploadtype'=>'',//评分上限评分最小值评分最大值评分类型'markdb'=>'300|-20|20|,rvrc,money,credit,1,',););//是否为默认用户组$gp_ifdefault='0';$SYSTEM=array(//是否允许进后台'allowadmincp'=>'1','visithide'=>'0' ,//是否允许批量删除主题前台帖子管理权限'delatc'=>'1',//是否允许批量移动帖子前台帖子管理权限'moveatc'=>'1',//是否允许批量复制帖子前台帖子管理权限'copyatc'=>'1',//是否拥有前台"精、锁、提、亮"管理权限'typeadmin'=>'1',//是否允许查看需要验证的帖子'viewcheck'=>'1',//是否允许查看关闭帖子'viewclose'=>'1',//是否允许查看附件(4.0以前)'attachper'=>'0',//是否允许删除附件'delattach'=>'1',//是否允许查看IP浏览帖子时显示0无1全部板块2所管理板块'viewip'=>'1',//是否开启评分权限(4.0以前)'markable'=>'0',//评分最大值(4.0以前)'maxcredit'=>'0',//评分类型(4.0以前)'credittype'=>'',//评分限制(4.0以前)'creditlimit'=>'',//是否开启会员禁言权限'banuser'=>'1',//是否允许永久禁言'bantype'=>'1',//禁言时间限制封禁会员的最大天数'banmax'=>'30',//是否允许查看加密帖(隐藏,加密,出售)'viewhide'=>'1',//是否允许灌水不受灌水时间限制'postpers'=>'1',//发表的文章是否需要管理员审核(4.0以前)'atccheck'=>'0',//是否允许回复锁定帖'replylock'=>'1',//是否允许删除自己的帖子(4.0以前)'modown'=>'0',//是否允许删除单一帖子(包括回复)'modother'=>'1' ,//是否允许编辑帖子编辑用户帖子'deltpcs'=>'1',//置顶权限0无1版块置顶2版块置顶,分类置顶3版块置顶,分类置顶,总置顶'topped'=>'3',//是否允许进行主题分类管理主题分类批量管理权限'tpctype'=>'1',//是否允许进行主题验证管理前台主题验证管理权限'tpccheck'=>'1',);?>datastylewind.phpQUOTE://此文件内容为论坛最基本的wind风格style相关参数//此风格在image目录下的文件夹名称:(请不要任意修改,如果需要请先手动修改image下的目录名)$stylepath='wind';//此风格在template目录下的风格文件夹名称$tplpath='wind';//表格内部是否使用白色:(如果要使用,请务必写yes不使用请写no)$yeyestyle='no';//表格边框颜色$tablecolor='#E7E3E7';//table//表格宽度$tablewidth='98%';//头部和尾部表格宽度$mtablewidth='760';//论坛版块列表颜色一$forumcolorone='#FFFFFF';//论坛版块列表颜色二$forumcolortwo='#F7F8F8';//版块内文章列表颜色一$threadcolorone='#FFFFFF';//文章列表颜色二$threadcolortwo='#F7F8F8';//阅读主题时文章背景颜色一$readcolorone='#FFFFFF';//阅读主题时文章背景颜色二$readcolortwo='#FFFFFF';//开发程序备用颜色$maincolor='#FFFFFF';?>requirecheckpass.php QUOTE://此文件内容为密码检测退出等代码//禁止直接访问此文件,若直接访问直接退出显示Forbidden!function_exists('readover')&&exit('Forbidden');//退出论坛函数functionLoginout(){//声明全局变量数据库访问类$db,当前时间$timestamp,在线用户时限$db_onlinetime,用户组id$groupid,用户登陆id$windid,用户id$winduid,COOKIE有效目录$db_ckpath,COOKIE有效域名$db_ckdomainglobal$db,$timestamp,$db_onlinetime,$groupid,$windid,$winduid,$db_ckpath,$db_ckdomain;//这次访问时间为当前时间与在线用户时限1.5倍的差$thisvisit=$timestamp-$db_onlinetime*1.5;//更新数据库中用户这次访问时间信息$db->update("UPDATEpcr_memberdataSETthisvisit='$thisvisit'WHEREuid='$winduid'");//取得cookie中设置信息ck_info,以"t"分割存入$db_ckpath,$db_ckdomainlist($db_ckpath,$db_ckdomain)=explode("t",GetCookie('ck_info'));//销毁cookiewinduserCookie('winduser','',0);//销毁cookiehideidCookie('hideid','',0);//销毁cookielastvisitCookie('lastvisit','',0);//销毁cookiepwdcheckforeach(GetCookie('pwdcheck')as$key=>$val){ Cookie("pwdcheck[$key]",'',0);}//销毁cookieck_infoCookie('ck_info','',0);}//向数据库更新某会员这次登陆ip信息functionLoginipwrite($winduid){//声明全局变量数据库访问类$db,当前时间$timestamp,客户端ip$onlineipglobal$db,$timestamp,$onlineip;//按格式记录登陆ip信息$logininfo="$onlineip|$timestamp|6";//更新数据库中上次访问时间为这次访问时间,这次防卫时间为当前时间,在线ip情况$db->update("UPDATEpcr_memberdataSETlastvisit=thisvisit,thisvisit='$timestamp',onlineip='$logininfo' WHEREuid='$winduid'");}//检查用户名和密码匹配情况functioncheckpass($username,$password){//声明全局变量数据库访问类$db,当前时间$timestamp,客户端ip$onlineip,COOKIE有效目录$db_ckpath,COOKIE有效域名$db_ckdomainglobal$db,$timestamp,$onlineip,$db_ckpath,$db_ckdomain;//取数据库记录存入数组$men中,索引包括用户id,用户密码,用户组id,是否已激活,在线ip信息$men=$db->get_one("SELECTm.uid,m.password,m.groupid,m.yz,md.onlineipFROMpcr_membersmLEFTJOINpcr_memberdatamdONmd.uid=m.uidWHEREusername='$username'");//该用户存在if($men){ //以"|"分割用户在线ip $e_login=explode("|",$men['onlineip']); //如果登陆ip不等于$onlineip.'*'或者当前时间离上次登陆超过600s或者密码重试次数大于1 if($e_login[0]!=$onlineip.'*'||($timestamp-$e_login[1])>600||$e_login[2]>1){  $men_uid=$men['uid'];  $men_pwd=$men['password'];  $check_pwd=$password;  //判断用户是否激活  if($men['yz']>2){   //转页面显示语言文件中login_jihuo对应键值的提示信息   Showmsg('login_jihuo');  }  if(strlen($men_pwd)==16){   $check_pwd=substr($password,8,16);/*支持16位md5截取密码*/  }  if($men_pwd==$check_pwd){   if(strlen($men_pwd)==16){    //更新数据库中用户密码信息    $db->update("UPDATEpcr_membersSETpassword='$password'WHEREuid='$men_uid'");   }   //记录用户组id信息   $L_groupid=(int)$men['groupid'];   //设置COOKIE有效目录$db_ckpath,COOKIE有效域名$db_ckdomain相关cookie   Cookie("ck_info",$db_ckpath."t".$db_ckdomain);  }else{    //声明全局变量还剩多少次密码尝试机会   global$L_T;   $L_T=$e_login[2];   $L_T?$L_T--:$L_T=5;   $F_login="$onlineip*|$timestamp|$L_T";   //更新相应用户的在线ip情况   $db->update("UPDATEpcr_memberdataSETonlineip='$F_login'WHEREuid='$men_uid'");   //转页面显示语言文件中login_pwd_error对应键值的提示信息   Showmsg('login_pwd_error');  } }else{  //超过密码错误尝试次数,该ip不允许在600s再次尝试  //声明全局变量距离下次可尝试密码的剩余时间$L_T  global$L_T;  $L_T=600-($timestamp-$e_login[1]);  //转页面显示语言文件中login_forbid对应键值的提示信息  Showmsg('login_forbid'); }}else{ //声明全局变量错误登陆名$errorname global$errorname; $errorname=$username; //转页面显示语言文件中user_not_exists对应键值的提示信息 Showmsg('user_not_exists');}//返回数组信息包括用户id,用户组id,编码后的密码信息returnarray($men_uid,$L_groupid,PwdCode($password));}?>requiredb_mysql.phpQUOTE://此文件内容为数据库访问相关公用函数//禁止直接访问此文件,若直接访问直接退出显示Forbidden!function_exists('readover')&&exit('Forbidden');//定义整个数据库访问类DBClassDB{//查询次数变量var$query_num=0;//构造函数,建立与数据库的连接functionDB($dbhost,$dbuser,$dbpw,$dbname,$pconnect=0){ $this->connect($dbhost,$dbuser,$dbpw,$dbname,$pconnect);} //连接数据库函数functionconnect($dbhost,$dbuser,$dbpw,$dbname,$pconnect=0){ //mysql_connect--打开一个到MySQL服务器的连接 //mysql_pconnect--打开一个到MySQL服务器的持久连接 //mysql_pconnect()和mysql_connect()非常相似,但有两个主要区别。 //首先,当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。 //其次,当脚本执行完毕后到SQL服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close()不会关闭由mysql_pconnect()建立的连接)。 //判断是否开启持久连接设置,开启则使用持久连接,未开启则使用一般连接 $pconnect==0?@mysql_connect($dbhost,$dbuser,$dbpw):@mysql_pconnect($dbhost,$dbuser,$dbpw); //mysql_errno--返回上一个MySQL操作中的错误信息的数字编码 //如果返回错误代码,则数据库挂起输出错误信息诚信为人2006-06-1101:49mysql_errno()!=0&&$this->halt("Connect($pconnect)toMySQL($dbhost,$dbuser)failed"); //如果数据库版本大于4.1且全局变量中字符集参数不为空 if($this->server_info()>'4.1'&&$GLOBALS['charset']){  //mysql_query--发送一条MySQL查询  //设置NAMES参数为相应字符集参数值,避免PHP读取mysql数据库时出现中文乱码  mysql_query("SETNAMES'".$GLOBALS['charset']."'"); } //如果数据库版本大于5.0 if($this->server_info()>'5.0'){  //设置sql_mode参数为空  mysql_query("SETsql_mode=''"); } //如果数据库名存在 if($dbname){  //mysql_select_db--选择MySQL数据库  //如果选择数据库未成功  if(!@mysql_select_db($dbname)){   //数据库挂起,输出错误信息   $this->halt('Cannotusedatabase'.$dbname);  } }} //关闭数据库函数functionclose(){ //mysql_close--关闭MySQL连接 returnmysql_close();}//选择数据库函数functionselect_db($dbname){ if(!@mysql_select_db($dbname)){  $this->halt('Cannotusedatabase'.$dbname); }}//数据库信息函数functionserver_info(){ //mysql_get_server_info--取得MySQL服务器版本信息 returnmysql_get_server_info();}//查询数据库函数functionquery($SQL,$method=''){ //如果表区分符设置的不是pcr_则替换sql语句中的pcr_为相应的表区分符 $GLOBALS['PW']=='pcr_'or$SQL=str_replace('pcr_',$GLOBALS['PW'],$SQL); //mysql_unbuffered_query--向MySQL发送一条SQL查询,并不获取和缓存结果的行 //mysql_unbuffered_query()向MySQL发送一条SQL查询query,但不像mysql_query()那样自动获取并缓存结果集。一方面,这在处理很大的结果集时会节省可观的内存。另一方面,可以在获取第一行后立即对结果集进行操作,而不用等到整个SQL语句都执行完毕。 //如果传入的方法参数为U_B且函数mysql_unbuffered_query存在,则 if($method=='U_B'&&function_exists('mysql_unbuffered_query')){  $query=mysql_unbuffered_query($SQL); }else{  $query=mysql_query($SQL); } //查询次数+1 $this->query_num++; //echo$SQL.''.$this->query_num.''; //如果没有查询结果,则数据库挂起输出错误信息 if(!$query)$this->halt('QueryError:'.$SQL); //返回查询结果资源 return$query;} //读取一条数据记录函数functionget_one($SQL){ $query=$this->query($SQL,'U_B'); //mysql_fetch_array--从结果集中取得一行作为关联数组,或数字数组,或二者兼有 //mysql_fetch_array()中可选的第二个参数result_type是一个常量,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM和MYSQL_BOTH。 //MYSQL_ASSOC返回的数据列使用字段名作为数组的索引名。 //MYSQL_BOTH返回的数据列使用字段名及数字索引作为数组的索引名。 //MYSQL_NUM返回的数据列使用数字索引作为数组的索引名。索引从0开始,表示返回结果的第一个字段。 $rs=&mysql_fetch_array($query,MYSQL_ASSOC); //返回结果数组 return$rs;}//连带更新函数functionpcr_update($SQL_1,$SQL_2,$SQL_3){ //取$SQL_1执行得到的数组 $rt=$this->get_one($SQL_1); //若得到的数组不为空 if($rt){  //更新执行$SQL_2  $this->update($SQL_2); }else{  //更新执行$SQL_3  $this->update($SQL_3); }}//更新数据库函数functionupdate($SQL){ //如果表区分符设置的不是pcr_则替换sql语句中的pcr_为相应的表区分符 $GLOBALS['PW']=='pcr_'or$SQL=str_replace('pcr_',$GLOBALS['PW'],$SQL); //如果开启进程优化 if($GLOBALS['db_lp']==1){  //如果你指定关键词LOW_PRIORITY,执行将被延迟,直到没有其它的客户端正在读取表。  //给更新命令加上LOW_PRIORITY关键字  if(substr($SQL,0,7)=='REPLACE'){   $SQL=substr($SQL,0,7).'LOW_PRIORITY'.substr($SQL,7);  }else{   $SQL=substr($SQL,0,6).'LOW_PRIORITY'.substr($SQL,6);  }  } if(function_exists('mysql_unbuffered_query')){  $query=mysql_unbuffered_query($SQL); }else{  $query=mysql_query($SQL); } //查询次数+1 $this->query_num++; //echo$SQL.''.$this->query_num.''; //如果没有结果,则数据库挂起输出错误信息 if(!$query)$this->halt('UpdateError:'.$SQL); //返回结果资源 return$query;}//从结果集中取得结果数组,根据参数决定数组索引functionfetch_array($query,$result_type=MYSQL_ASSOC){ returnmysql_fetch_array($query,$result_type);}//返回影响记录数functionaffected_rows(){ //mysql_affected_rows--取得前一次MySQL操作所影响的记录行数 returnmysql_affected_rows();}//返回结果集行数functionnum_rows($query){ //mysql_num_rows--取得结果集中行的数目 $rows=mysql_num_rows($query); return$rows;}//释放结果内存functionfree_result($query){ //mysql_free_result--释放结果内存 //mysql_free_result()仅需要在考虑到返回很大的结果集时会占用多少内存时调用。在脚本结束后所有关联的内存都会被自动释放。 returnmysql_free_result($query);}//取得操作产生的idfunctioninsert_id(){ //mysql_insert_id--取得上一步INSERT操作产生的ID $id=mysql_insert_id(); return$id;} //数据库挂起函数,并输出相应错误信息functionhalt($msg=''){ //包含require/db_mysql_error.php文件,如果其中有重复包含,略过 require_once(R_P.'require/db_mysql_error.php'); //输出数据库错误提示信息 newDB_ERROR($msg);}}?>/****Copyright(c)2003-06PHPWind.net.Allrightsreserved.*Support:http://www.phpwind.net*ThissoftwareistheproprietaryinformationofPHPWind.com.**///此文件内容为全局变量和公用函数//定义只有运行错误和语法编译错误才会显示错误信息error_reporting(E_ERROR|E_PARSE);//设置php.ini中magic_quotes_runtime选项值为0//若magic_quotes_runtime打开时,所有外部引入的数据库资料或者文件等等都会自动转为含有反斜线溢出字符的资料。//0表示关闭此功能set_magic_quotes_runtime(0);//microtime()当前Unix时间戳以及微秒数。本函数仅在支持gettimeofday()系统调用的操作系统下可用。//如果调用时不带可选参数,本函数以"msecsec"的格式返回一个字符串,其中sec是自Unix纪元(0:00:00January1,1970GMT)起到现在的秒数,msec是微秒部分。字符串的两部分都是以秒为单位返回的。//用$t_array变量记录microtime()函数产生的msec和sec,此时$t_array代表数组$t_array=explode('',microtime());//$P_S_T记录当前时间秒数$P_S_T=$t_array[0]+$t_array[1];//判断__FILE__是否为空,返回路径值,并定义为D_P和R_P//其中__FILE__文件的完整绝对路径和文件名//D_P和R_P的区别在于,当论坛使用二级目录设置时,D_P用于分论坛,R_P用于记录总论坛目录的绝对路径//具体参考PHPWind论坛关于二级目录方面的说明//在没有使用这方面设置的时候这两个值相等define('D_P',__FILE__?getdirname(__FILE__).'/':'./');define('R_P',D_P);//销毁以下变量 unset($_ENV,$HTTP_ENV_VARS,$_REQUEST,$HTTP_POST_VARS,$HTTP_GET_VARS,$HTTP_POST_FILES,$HTTP_COOKIE_VARS);//get_magic_quotes_gpc函数取得PHP环境配置的变量magic_quotes_gpc(GPC,Get/Post/Cookie)值。返回0表示关闭本功能;返回1表示本功能打开。当magic_quotes_gpc打开时,所有的'(单引号),"(双引号),(反斜线)and空字符会自动转为含有反斜线的溢出字符。//在magic_quotes_gpc功能关闭的情况下,对$_POST、$_GET、$_COOKIE中的特殊字符转义处理if(!get_magic_quotes_gpc()){//$_POST经由HTTPPOST方法提交至脚本的变量。Add_S($_POST);//$_GET经由URL请求提交至脚本的变量。Add_S($_GET);//$_FILES通过HTTPPOST方法传递的已上传文件项目组成的数组。Add_S($_FILES);//$_COOKIE经由HTTPCookies方法提交至脚本的变量。Add_S($_COOKIE);}//$_SERVER变量由web服务器设定或者直接与当前脚本的执行环境相关联。//如果服务器变量中存在HTTP_X_FORWARDED_FOR,则从中取得客户端ip,如果没有则到HTTP_CLIENT_IP中取,都没有则到REMOTE_ADDR中取//'HTTP_CLIENT_IP','HTTP_X_FORWARDED_FOR'是代理的IP//这些IP头消息未必能够取得到(因为不同的浏览器不同的网络设备,可能发不同的IP头消息).所以PHP就尝试把每个IP头消息判断一下,若有,则取其中的一个.//$c_agentip记录是否为代理ipif($_SERVER['HTTP_X_FORWARDED_FOR']){$onlineip=$_SERVER['HTTP_X_FORWARDED_FOR'];$c_agentip=1;}elseif($_SERVER['HTTP_CLIENT_IP']){$onlineip=$_SERVER['HTTP_CLIENT_IP'];$c_agentip=1;}else{$onlineip=$_SERVER['REMOTE_ADDR'];$c_agentip=0;}//str_replace用指定的字符串替换在被搜索的字符串中找到的字符串;//第一个,要搜索的字符串,第二个为替换为的字符串,第三个被搜索的字符串//取得客户端ip值$onlineip=substrs(str_replace(" ",'',$onlineip),16);//返回自从Unix纪元(格林威治时间1970年1月1日00:00:00)到当前时间的秒数。$timestamp=time();//require_oncerequire_once() 语句在脚本执行期间包含并运行指定文件。此行为和require()语句类似,//唯一区别是如果该文件中的代码已经被包含了,则不会再次包含.应该用于在脚本执行期间同一个文件有可能被//包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。//包含require/defend.php文件,如果其中有重复包含,略过require_once(R_P.'require/defend.php');//根据时区设置$db_cvtime取得正确的时间$timestamp$db_cvtime!=0&&$timestamp+=$db_cvtime*60;//如果论坛运行在DEBUG模式下if($db_debug){//定义显示所有错误除了运行NOTICE错误error_reporting(E_ALL^E_NOTICE);}//PHPWind论坛版本变量$wind_version="4.3.2";//在线列表大小值$db_olsize=96;//静态htm缓存目录名$htmdir='htm_data';//'PHP_SELF'当前正在执行脚本的文件名,与documentroot相关//'SCRIPT_NAME'当前执行脚本的绝对路径名,注:如果脚本在CLI中被执行,作为相对路径,例如//file.php或../file.php,$_SERVER['SCRIPT_FILENAME']将包含用户指定的相对路径。//'QUERY_STRING'查询(query)的字符串(URL中第一个问号?之后的内容)。//如果PHP_SELF(当前正在执行脚本的文件名)为空,则设置其为SCRIPT_NAME(包含当前脚本的路径)!$_SERVER['PHP_SELF']&&$_SERVER['PHP_SELF']=$_SERVER['SCRIPT_NAME'];//取得请求url完整的路径保存在$REQUEST_URI变量中$REQUEST_URI=$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];//判断当前执行文件名中是否包含静态目录$db_dir,如果包含,则if(strpos($_SERVER['PHP_SELF'],$db_dir)!==false){//strpos查找字符串第一次出现的位置,第一个为被查找的字符串,第二个为要查找的字符串。返回值为0,或//者被查找的字符第一次出现的数字位置的值;//取到静态目录前$tmp=substr($_SERVER['PHP_SELF'],0,strpos($_SERVER['PHP_SELF'],$db_dir));}else{//取全部$tmp=$_SERVER['PHP_SELF'];}//HTTP_HOST-当前请求的Host:头信息的内容 //设置论坛地址$db_bbsurl="http://$_SERVER[HTTP_HOST]".substr($tmp,0,strrpos($tmp,'/'));//(int)强制类型转换为整型//定义整型变量$fid用于记录板块id$fid=(int)$fid;//定义整型变量$tid用于记录帖子id$tid=(int)$tid;//初始化附件保存目录$attachname及js脚本路径$js_path$attachname=$js_path='';//包含data/bbscache/dbset.php文件,如果其中有重复包含,略过require_once(D_P.'data/bbscache/dbset.php');//ob_start("ob_gzhandler");是一种压缩技术//ob_start();仅仅启动缓冲并没有压缩输出//ob_start用来打开输出缓冲区。当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或者使用ob_end_clean()来输出缓冲区的内容。//是否允许GZIP压缩输出,允许使用ob_gzhandler压缩技术,否则只启动缓冲$db_obstart==1?ob_start('ob_gzhandler'):ob_start();//如果使用跨台固定图片链,则图片路径为$db_http值,否则使用$picpath图片保存目录$imgpath=$db_http!='N'?$db_http:$picpath;//如果使用远程附件连接设置,则附件路径为$db_attachurl,否则使用$attachname附件保存目录$attachpath=$db_attachurl!='N'?$db_attachurl:$attachname;//本地图片路径$imgdir=R_P.$picpath;//本地附件路径$attachdir=R_P.$attachname;//如果D_P和R_P不相等并且使用了跨台固定图片链,即使用了二级目录功能if(D_P!=R_P&&$db_http!='N'){//取总站论坛地址$R_url=substr($db_http,-1)=='/'?substr($db_http,0,-1):$db_http;$R_url=substr($R_url,0,strrpos($R_url,'/'));}else{//总站论坛地址即全局变量$db_bbsurl中的论坛地址值$R_url=$db_bbsurl;}//如果cookie中上次访问变量lastvisit值是否为空if(GetCookie('lastvisit')){//取cookie中的上次访问变量lastvisit值,以"t"分割并分别赋于$c_oltime,$lastvisit,$lastpath//$c_oltime-用户在线时间,$lastvisit-上次访问时间,$lastpath-上次访问路径 list($c_oltime,$lastvisit,$lastpath)=explode("t",GetCookie('lastvisit'));//判断现在和上次访问之间的时间差是否小于论坛设定的在线用户时限,如果小于,则用户此次在线时间累加相应时间数值($onbbstime=$timestamp-$lastvisit)[/color]$db_onlinetime[color=#0000ff]&&$c_oltime+=$onbbstime;}else{$lastvisit=$lastpath='';$c_oltime=0;}//取在线偏移cookie(在线列表文件中的偏移量)$ol_offset=GetCookie('ol_offset');//取风格cookie$skinco=GetCookie('skinco');//若刷新预防时间不等于0if($db_refreshtime!=0){//$REQUEST_URI访问此页面所需的URI。//如果$REQUEST_URI与上次最后访问的路径相同,且与上次访问的时间差小于论坛设定的刷新预防时间if($REQUEST_URI==$lastpath&&$onbbstime[/color]$db_refreshtime[color=#000099]){ //如果Cookie中没有winduser即用户的记录,设置$groupid为guest即当前用户归于游客组 !GetCookie('winduser')&&$groupid='guest'; //创始人账号设置为TRUE $manager=TRUE; //如果cookie中没有风格变量,则风格设置为论坛的默认风格 $skin=$skinco?$skinco:$db_defaultstyle; //转页面显示语言文件中refresh_limit对应键值的提示信息 Showmsg("refresh_limit");}}//引用在PHP中引用意味着用不同的名字访问同一个变量内容。这并不像C的指针,替代的是,引用是符号//表别名。注意在PHP中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。PHP的引用允//许用两个变量来指向同一个内容。意思是,当这样做时:$a=&$b;这意味着$a和$b指向了//同一个变量。注:$a和$b在这里是完全相同的,这并不是$a指向了$b或者相反,而是$a和$b指向//了同一个地方。注:如果具有引用的数组被拷贝,其值不会解除引用。对于数组传值给函数也是如此。$H_url=&$db_wwwurl;$B_url=&$db_bbsurl; //包含data/sql_config.php文件,如果其中有重复包含,略过require_once(D_P.'data/sql_config.php');//如果论坛关闭if($db_bbsifopen==0){//从cookie中取得AdminUser(管理人员)变量值,并对其进行解码操作后,以"t"分割存入数组$CK中$CK=explode("t",StrCode(GetCookie('AdminUser'),'DECODE'));//如果上次访问时间$CK[0]与现在相差超过1800s即30分钟//或者账号$CK[1]不是创始人账号$manager//或者不符合安全检测if($timestamp-$CK[0]>1800||$CK[1]!=$manager||!SafeCheck($CK,PwdCode($manager_pwd))){ //取得风格值 $skin=$skinco?$skinco:$db_defaultstyle; //设置用户组为空 $groupid=''; //转页面显示$db_whybbsclose信息即论坛关闭的原因 Showmsg($db_whybbsclose);}}//gmdate--格式化一个GMT/UTC日期/时间//date--格式化一个本地时间/日期,返回将整数timestamp按照给定的格式字串而产生的//字符串。如果没有给出时间戳则使用本地当前时间。换句话说,timestamp是可选的,默认值为time()。注://有效的时间戳典型范围是格林威治时间1901年12月13日20:45:54到2038年1月19日//03:14:07。(此范围符合32位有符号整数的最小值和最大值)。不过在PHP5.1之前此范围在某些系统//(如Windows)中限制为从1970年1月1日到2038年1月19日。//格式字串可以识别以下format参数的字符串format字符说明返回值例子//日------//d月份中的第几天,有前导零的2位数字01到31//D星期中的第几天,文本表示,3个字母Mon到Sun//j月份中的第几天,没有前导零1到31//l(“L”的小写字母)星期几,完整的文本格式Sunday到Saturday//NISO-8601格式数字表示的星期中的第几天(PHP5.1.0新加)1(表示星期一)到7(表示星期天)//S每月天数后面的英文后缀,2个字符st,nd,rd或者th。可以和j一起用//w星期中的第几天,数字表示0(表示星期天)到6(表示星期六)//z年份中的第几天0到366//星期------//WISO-8601格式年份中的第几周,每周从星期一开始(PHP4.1.0新加的) //月------//F月份,完整的文本格式,例如January或者MarchJanuary到December//m数字表示的月份,有前导零01到12//M三个字母缩写表示的月份Jan到Dec//n数字表示的月份,没有前导零1到12//t给定月份所应有的天数28到31//年------//L是否为闰年如果是闰年为1,否则为0//oISO-8601格式年份数字。这和Y的值相同,只除了如果ISO的星期数(W)属于前一年或下一年,则用//那一年。(PHP5.1.0新加)Examples:1999or2003//Y4位数字完整表示的年份例如:1999或2003//y2位数字表示的年份例如:99或03//时间------//a小写的上午和下午值am或pm//A大写的上午和下午值AM或PM//BSwatchInternet标准时000到999//g小时,12小时格式,没有前导零1到12//G小时,24小时格式,没有前导零0到23//h小时,12小时格式,有前导零01到12//H小时,24小时格式,有前导零00到23//i有前导零的分钟数00到59//s秒数,有前导零00到59//时区------//e时区标识(PHP5.1.0新加)例如:UTC,GMT,Atlantic/Azores//I是否为夏令时如果是夏令时为1,否则为0//O与格林威治时间相差的小时数例如:+0200//T本机所在的时区例如:EST,MDT(在Windows下为完整文本格式,例如“Eastern//StandardTime”,中文版会显示“中国标准时间”)。//Z时差偏移量的秒数。UTC西边的时区偏移量总是负的,UTC东边的时区偏移量总是正的。-43200到43200//完整的日期/时间------//cISO8601格式的日期(PHP5新加)2004-02-12T15:19:21+00:00//rRFC822格式的日期例如:Thu,21Dec200016:01:07+0200//U从Unix纪元(January1197000:00:00GMT)开始至今的秒数参见time()//格式字串中不能被识别的字符将原样显示。Z格式在使用gmdate()时总是返回0。//取当前默认时区时间的24小时时间值,赋于$t['hours']$t=array('hours'=>gmdate('G',$timestamp+$db_timedf*3600));//floor--舍去法取整//今天的起始时间$tdtime=(floor($timestamp/3600)-$t['hours'])*3600;//是否需要更新在线情况标记 $runfc='N';//如果上次访问时间和当前时间的时间差大于论坛设置的在线用户时限//或者板块$fid不为空且不等于cookie中的上次访问板块id//或者上次访问板块id的cookie存在且$wind_in(论坛动作)为hm(论坛首页)if($timestamp-$lastvisit>$db_onlinetime||($fid&&$fid!=GetCookie('lastfid'))||(GetCookie('lastfid')&&$wind_in=='hm')){//设置cookie中上次访问板块idCookie('lastfid',$fid);//设置$runfc为Y$runfc='Y';//包含data/userglobal.php文件,如果其中有重复包含,略过require_once(R_P.'require/userglobal.php');}//包含require/db_'.$database.'.php文件,如果其中有重复包含,略过(此处为db_mysql.php)require_once(R_P.'require/db_'.$database.'.php');//创建数据库连接$db=newDB($dbhost,$dbuser,$dbpw,$dbname,$pconnect);//销毁$dbhost,$dbuser,$dbpw,$dbname,$pconnect,$manager_pwd变量unset($dbhost,$dbuser,$dbpw,$dbname,$pconnect,$manager_pwd);//从cookie中取得winduser信息解码用"t"分割后存入$winduid,$windpwdlist($winduid,$windpwd)=explode("t",StrCode(GetCookie('winduser'),'DECODE'));//若用户登陆id存在且密码长度大等于16if($winduid&&strlen($windpwd)>=16){//定义$winddb为用户信息数组$winddb=User_info();//用户id$winduid=$winddb['uid'];//用户组id$groupid=$winddb['groupid'];//用户实际威望为数据库中威望值/10取整$userrvrc=(int)($winddb['rvrc']/10);//用户名$windid=$winddb['username'];//用户时间显示格式$_datefm=$winddb['datefm'];//用户时区设置$_timedf=$winddb['timedf'];//用户皮肤$skin=$winddb['style']?$winddb['style']:$db_defaultstyle;//用户在线ip$winddb['onlineip']=substr($winddb['onlineip'],0,strpos($winddb[ 'onlineip'],'|'));//如果用户组id为-1则设置用户组id为用户的会员组id$groupid=='-1'&&$groupid=$winddb['memberid'];//若用户开启签名显示功能且//((用户开始使用签名时间为空且签名显示一天需要交易币个数不为空且当前用户组属于需要购买签名显示的用户组且用户拥有的交易币数大于签名显示一天需要交易币个数)或者//(用户开始使用签名时间不为空且用户开始使用签名时间不等于今日开始时间))if($winddb['showsign']&&(!$winddb['starttime']&&$db_signmoney&&strpos($db_signgroup,",$groupid,")!==false&&$winddb['currency']>$db_signmoney||$winddb['starttime']&&$winddb['starttime']!=$tdtime)){ //包含require/Signfunc.php文件,如果其中有重复包含,略过 require_once(R_P.'require/Signfunc.php'); //对用交易币购买签名做相应的操作 Signfunc($winddb['showsign'],$winddb['starttime'],$winddb['currency']);}}else{//若登陆id不存在//设置风格为论坛默认风格$skin=$db_defaultstyle;//用户组为游客组$groupid='guest';//销毁$winddbunset($winddb);//设置用户名,用户id,用户时间显示方式,用户时区设置$windid=$winduid=$_datefm=$_timedf='';}//取最优先的风格$_GET['skinco']&&$skinco=$_GET['skinco'];$_POST['skinco']&&$skinco=$_POST['skinco'];//如果风格存在,且D_P."data/style/$skinco.php"文件存在,风格变量中不包含".."if($skinco&&file_exists(D_P."data/style/$skinco.php")&&strpos($skinco,'..')===false){//设置风格变量$skin=$skinco;//设置风格cookieCookie('skinco',$skinco);}//对处在ip封禁列表中的ip禁止登陆Ipban() ;//设置上次访问cookie,包括此次在线时间、当前时间、请求页面Cookie('lastvisit',$c_oltime."t".$timestamp."t".$REQUEST_URI);//如果当前用户组不是游客if($groupid!='guest'){//且相应组别配置文件存在if(file_exists(D_P."data/groupdb/group_$groupid.php")){ //包含相应组别配置文件,如有重复,略过 require_once(D_P."data/groupdb/group_$groupid.php");}else{ //否则载入默认组别配置文件 require_once(D_P."data/groupdb/group_1.php");}}else{//载入游客组配置文件require_once(D_P."data/groupdb/group_2.php");}//HTTP_REFERER链接到当前页面的前一页面的URL地址。不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改HTTP_REFERER。因此,这个变量不总是真实正确的。//HTTP_HOST当前请求的Host:头信息的内容。//如果允许用户使用宣传代码且用户名非空且传入的参数$u为数字//或者传入的参数$a存在且长度不超过16且HTTP_REFERER中不含HTTP_HOST

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭