PHPWind 源码解析_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > PHPWind 源码解析

PHPWind 源码解析

 2012/4/24 17:14:22  xvyoyo  程序员俱乐部  我要评论(0)
  • 摘要:保留关键字函数类型字符串注释括号数字运算符预定义变量PHP开始结束标签global.phpQUOTE:<?php/****Copyright(c)2003-06PHPWind.net.Allrightsreserved.*Support:http://www.phpwind.net*ThissoftwareistheproprietaryinformationofPHPWind.com
  • 标签:PHP 源码 解析

?

保留关键字?
函数?
类型?
字符串?
注释?
括号?? ???
数字?
运算符?
预定义变量?
PHP?开始结束标签?


global.php?

QUOTE:?

<?php?
/**?
*?
* Copyright (c) 2003-06 PHPWind.net. All rights reserved.?
* Support :?http://www.phpwind.net?
* This software is the proprietary information of PHPWind.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() 系统调用的操作系统下可用。?
//如果调用时不带可选参数,本函数以 "msec sec" 的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January 1, 1970 GMT)起到现在的秒数,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 经由 HTTP POST 方法提交至脚本的变量。?
??Add_S(?$_POST?)?;?
??//$_GET 经由 URL 请求提交至脚本的变量。?
??Add_S(?$_GET?)?;?
??//$_FILES 通过 HTTP POST 方法传递的已上传文件项目组成的数组。?
??Add_S(?$_FILES?)?;?
??//$_COOKIE 经由 HTTP Cookies 方法提交至脚本的变量。?
??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记录是否为代理ip?

if?(?$_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?(?"\n"?,''?,$onlineip)?,16?)?;?
//返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。?
$timestamp=?time?()?;?
//require_once require_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缓存目录名?
$htm dir?=?'htm_data'?;

?

//'PHP_SELF' 当前正在执行脚本的文件名,与 document root 相关?
//'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)?<?$db_onlinetime?&&?$c_oltime+=?$onbbstime;?
}?else?{?
??$lastvisit=?$lastpath=?''?;?
??$c_oltime=?0?;?
}?
//取在线偏移cookie(在线列表文件中的偏移量)?
$ol_offset?=?GetCookie(?'ol_offset'?)?;?

//取风格cookie?
$skinco?=?GetCookie(?'skinco'?)?;?
//若刷新预防时间不等于0?
if?(?$db_refreshtime!=?0?){?
??//$REQUEST_URI 访问此页面所需的 URI。?
??//如果$REQUEST_URI与上次最后访问的路径相同,且与上次访问的时间差小于论坛设定的刷新预防时间?

??if?(?$REQUEST_URI?==?$lastpath?&&?$onbbstime<?$db_refreshtime){?
? ??//如果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 位有符号整数的最小值和最大值)。不过在?
PHP?5.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?
//N ISO-8601 格式数字表示的星期中的第几天(
?PHP?5.1.0 新加) 1(表示星期一)到 7(表示星期天)?
//S 每月天数后面的英文后缀,2 个字符 st,nd,rd 或者 th。可以和 j 一起用?
//w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)?
//z 年份中的第几天 0 到 366?
//星期 --- ---?
//W ISO-8601 格式年份中的第几周,每周从星期一开始(
?PHP?4.1.0 新加的)?
//月 --- ---?
//F 月份,完整的文本格式,例如 January 或者 March January 到 December?
//m 数字表示的月份,有前导零 01 到 12?
//M 三个字母缩写表示的月份 Jan 到 Dec?
//n 数字表示的月份,没有前导零 1 到 12?
//t 给定月份所应有的天数 28 到 31?
//年 --- ---?
//L 是否为闰年 如果是闰年为 1,否则为 0?
//o ISO-8601 格式年份数字。这和 Y 的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用?
//那一年。(
?PHP?5.1.0 新加) Examples: 1999 or 2003?
//Y 4 位数字完整表示的年份 例如:1999 或 2003?
//y 2 位数字表示的年份 例如:99 或 03?
//时间 --- ---?
//a 小写的上午和下午值 am 或 pm?
//A 大写的上午和下午值 AM 或 PM?
//B Swatch Internet 标准时 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 时区标识(
?PHP?5.1.0 新加) 例如:UTC,GMT,Atlantic/Azores?
//I 是否为夏令时 如果是夏令时为 1,否则为 0?
//O 与格林威治时间相差的小时数 例如:+0200?
//T 本机所在的时区 例如:EST,MDT(在 Windows 下为完整文本格式,例如“Eastern?
//Standard Time”,中文版会显示“中国标准时间”)。?
//Z 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 -43200 到 43200?
//完整的日期/时间 --- ---?
//c ISO 8601 格式的日期(
?PHP?5 新加) 2004-02-12T15:19:21+00:00?
//r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200?
//U 从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数 参见 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中上次访问板块id?
??Cookie(?'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?=?new?DB(?$dbhost, $dbuser, $dbpw, $dbname, $pconnect)?;?
//销毁$dbhost,$dbuser,$dbpw,$dbname,$pconnect,$manager_pwd变量?
unset?(?$dbhost,$dbuser,$dbpw,$dbname,$pconnect,$manager_pwd)?;?
//从cookie中取得winduser信息解码用"\t"分割后存入$winduid,$windpwd?
list?(?$winduid,$windpwd)?=?explode?(?"\t"?,StrCode(?GetCookie(?'winduser'?)?,'DECODE'?))?;
//若用户登陆id存在且密码长度大等于16?
if?(?$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'?;?
??//销毁$winddb?
??unset?(?$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;?
??//设置风格cookie?
??Cookie(?'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?
if?(?$db_ads?&& !?$windid?&&?(?is_numeric?(?$u)?||?(?$a?&&?strlen?(?$a)?<?16?))?&&?strpos?(?$_SERVER?['HTTP_REFERER'?]?,$_SERVER?[?'HTTP_HOST'?])?===?false?){?
??//设置用户宣传cookie userads?
??Cookie(?'userads'?,"$u\t$a"?)?;?
}?

//如果SCR常量没有定义?
if?(?!?defined?(?'SCR'?)){?
??//定义其为other?
??define?(?'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'?]?;?
??}?
}
?
//返回页首导航 类似 霏凡论坛 -> 口- 超级灌水?
function?headguide(?$guidename=?array?()?,$guide=?''?){?
??global?$fid,$jinhua;?
??if?(?is_array?(?$guidename)){?
? ??foreach?(?$guidename?as?$key=>?$value){?
? ?? ???if?(?$key){?
? ?? ?? ? $headguide.=?$value???" -> <a href='$value'>$key</a>"?:?" -> $key"?;?
? ?? ???}?
? ? }?
??}
?else?{?
? ? $headguide.=?" -> "?.?$guidename;?
??}?
??//返回页首导航字符串?
??return?$headguide;?
}?

//页面跳转?
function?refreshto(?$URL,$content,$statime=?1?){?
??global?$db_ifjump;?
??//替换url中的特殊字符=?
??$URL=?str_replace?(?'='?,'='?,$URL)?;?
??//如果开启自动跳转且多少秒后抓向$statime大于0?
??if?(?$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?color: #0
发表评论
用户名: 匿名