background image

诚信为人

2006-06-11 01:48

'bank'=>array('

行','bank','bank.php','bankset.php','1','hack/bank.php,hack/bankset.php,template/wind/bank.htm,te
mplate/admin/bankset.htm'), 
'colony'=>array('

圈','colony','colony.php','colonyset.php','1','hack/colony.php,hack/colonyset.php,template/admin/c
olonyset.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/meda
l.htm,template/admin/medalset.htm'), 
'toolcenter'=>array('

心 ','toolcenter','toolcenter.php','toolsetting.php','0','hack/toolcenter.php,hack/toolsetting.php,templ
ate/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,tem
plate/admin/blogset.htm'), 
'live'=>array('网络电视','live','live.php','','2',''), 
); 

?> 
data\bbscache\config.php

QUOTE:

//

 

此文件内容为论坛核心设置,论坛程序修改的时候同时修改数据库和本文件

//如果某些变量没有,说明还没有在后台保存过相应设置,本文件中的某些变量需要保

 

存过相应设置才会存在
//定时更改图片目录防止图片盗链(小时) 
$db_hour='20'; 
//

 

是否使用跨台固定图片链

$db_http='N'; 
//

 

是否自动不定期更改图片链

$db_autochange='0'; 
//论坛状态:

 

是否关闭

$db_bbsifopen='1'; 
//

 

论坛关闭的原因

$db_whybbsclose='论坛升级中... 

 

请等候 15 分钟'; 

//

 

论坛标题

$db_bbsname='PHPwind Board'; 
//

 

论坛地址

$db_bbsurl='

http://localhost/phpwind

'

//论坛标题(4.0.1

 

以下版本使用)

$db_wwwname='PHPwind Studio'; 
//论坛地址(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'; 
//

 

签名中是否使用 Wind IMG

 

功能

$db_windpic['pic']='1'; 

if(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.'"'; 

//

 

取得用户信息数组

function User_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("SELECT 

m.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.starttime FROM pcr_members m LEFT 

JOIN pcr_memberdata md USING(uid) WHERE m.uid='$winduid'"); 
//如果用户登陆 ip 字段中不存在当前客户端 ip

 

信息

if(strpos($detail['onlineip'],$onlineip)===false){ 
  //以"."分割客户端 ip 
  $iparray=explode(".",$onlineip); 
  //如果用户登陆 ip 字段中不存在当前客户端 ip 的前 2 节则退出标记设为 
  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("UPDATE   pcr_memberdata   SET  $ct  WHERE   uid='$winduid'  AND 

$timestamp-thisvisit>$db_onlinetime"); 
  } 


//

 

返回用户信息数组

return $detail; 

//返回 pwd

 

的编码后值

function PwdCode($pwd){ 
//连接头信息、$pwd 参数(密码)以及论坛安全验证参数,md5

 

加密后返回该值

return md5($_SERVER["HTTP_USER_AGENT"].$pwd.$GLOBALS['db_hash']); 


//安全检测,若不符合销毁相应 cookie,符合重新设置相应 cookie 
function SafeCheck($CK,$PwdCode,$var='AdminUser',$expire=1800){ 
//声明全局变量$timestamp 
global $timestamp; 
//上次访问时间和当前时间的时间差赋于变量$t 
$t = $timestamp - $CK[0]; 
//如果其超过定义的过期时间或者$CK[2]中存储的密码(编码后的密码连接上次访问时

间再 md5

 

加密后得到的值)并不匹配

if($t > $expire || $CK[2] != md5($PwdCode.$CK[0])){ 
  //设置$var 状态为无效,即销毁此 cookie 
  Cookie($var,'',0); 

  return false; 
}else{ 
  //

 

设置上次访问时间为当前时间

  $CK[0] = $timestamp; 
  //设置存储的密码信息为编码后的密码连接当前时间再 md5

 

加密后得到的

  $CK[2] = md5($PwdCode.$timestamp); 
  //implode 联结数组元素为一个字符串;string implode ( string glue, array pieces )第一个参

 

数为分割符
  //

 

第二个参数为要联结的数组单元;

  //用"\t"连接数组$CK 
  $Value = implode("\t",$CK); 
  //设置变量$$var 为$Value

 

编码后的值

  $$var = StrCode($Value); 
  Cookie($var,StrCode($Value)); 

  return true; 


//

 

对字符串进行编码或解码处理,并返回编码或解码后得到的

function StrCode($string,$action='ENCODE'){ 
//HTTP_USER_AGENT-

 

当前请求的 User-Agent: 头信息的内容。该字符串表明了访问该页

面的用户代理的信息。一个典型的例子是:Mozilla/4.5 [en] (X11; U; 

Linux

 2.2.9 i586)。也可

 

以使用 get_browser() 

 

得到此信息。

//连接头信息和论坛安全验证参数,md5 加密后,从第 8 位起取 18 个字符,作为变量
key

 

的值

$key = substr(md5($_SERVER["HTTP_USER_AGENT"].$GLOBALS['db_hash']),8,18); 
//base64_decode -- 

 

对使用 MIME base64 

 

编码的数据进行解码

//如果选择的操作是编码操作,则 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 ^ $b Xor

 

 

(按位异或) 将把 $a   

和 $b 

 

中不同的位设为 1  

  //把$string[$i]和$key[$k]以 ascii 值方式进行异或运算后,值累加到 code

 

变量中

  $code .= $string[$i] ^ $key[$k]; 

//base64_encode -- 

 

使用 MIME base64 

 

对数据进行编码

//

 

设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的

 

主体。
//Base64-encoded 

 

数据要比原始数据多占用 33% 左右

空间

 

//如果选择的操作是加码操作,则 code 变量不变,否则为 base64 编码 code

 

后得到的值

$code = $action == 'DECODE' ? $code : base64_encode($code); 

return $code; 

//返回$content 字符串$length 长度的值,超过$length 显示".." 
function substrs($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 返回字符串的第一个字符的二进制值;string chr ( int ascii ) 

 

返回相对应于 ascii 

 

所指定的单个字符。
      $retstr .= ord($content[$i]) > 127 ? $content[$i].$content[++$i] : $content[$i]; 
    } 

    return $retstr.' ..'; 
  }else{ 
    //trim 去除字符串里的空格或其他字符,string trim ( string str [, string charlist] )

 

    //" " (ASCII 32 (0x20)), 空格."\t" (ASCII 9 (0x09)),tab 字符."\n" (ASCII 10 (0x0A)),换行符;
 
    //"\r" (ASCII 13 (0x0D)), 回车符."{post.content}" (ASCII 0 (0x00)),空字符."\x0B" (ASCII 
11 (0x0B)), 垂直 tab. 
    return utf8_trim(substr($content,0,$length)).' ..'; 

  } 

return $content; 

//将非 utf8

 

字符集字符串取整字符串避免乱码

function utf8_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) return substr($str,0,$i); 
  if(($ch & 192)==192)return substr($str,0,$i); 


return($str.$hex); 


//

 

按格式返回时间

function get_date($timestamp,$timeformat=''){ 
//声明全局变量论坛默认时间显示格式$db_datefm,默认时区设置$db_timedf,用户时间显示

格式$_datefm,用户时区设置$_timedf 
global $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; 


//

 

按格式返回真实的用户显示时间

return gmdate($date_show,$timestamp+$offset*3600); 

//递归执行,使得每个数组中的字符串都是为了数据库查询语句等的需要在某些特殊字

 

符前加上了反斜线的字符串
function Add_S(&$array){ 
foreach($array as $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]); 
  } 



//

 

对字符中的特殊字符进行转义,并返回转换后的字符串

function Char_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; 


//

 

认证码检查函数

function GdConfirm($code){ 
//销毁 cookie 中的 cknum 
Cookie('cknum','',0); 
if(!$code

 

||

 

!SafeCheck(explode("\t",StrCode(GetCookie('cknum'),'DECODE')),

$code,'cknum',1800)){ 
  //转页面显示语言文件中 check_error

 

对应键值的提示信息

  Showmsg('check_error'); 


//

 

广告初始化函数

function AdvertInit($SCR,$fid){ 
//声明全局变量当前时间$timestamp 
global $timestamp; 
//包含 data/bbscache/advert_data.php 
include(D_P.'data/bbscache/advert_data.php'); 
$newadvert = array(); 

foreach($advertdb as $key=>$val){ 
  foreach($val as $k=>$v){ 
    //strtotime -- 

 

将任何英文文本的日期时间描述解析为 Unix 时间戳,本函数预期接受一

 

个包含美国英语日期格
    //

 

式的字符串并尝试将其解析为 Unix 

 

时间戳(自 January 1 1970 00:00:00 GMT 起的秒

 

数),其值相对于
    //now 

 

参数给出的时间,如果没有提供此参数则用系统当前时间。本函数将使用 TZ 环

 

境变量(如果有的话)来
    //

 

计算时间戳。自 PHP 5.1.0 起有更容易的方法来定义时区用于所有的日期/时间函数。

 

此过程在
    //date_default_timezone_get() 函数页面中有说明。注: 如果给定的年份是两位数字的格式,

 

则其值 0-69 
    //

 

表示 2000-2069,70-100 

 

表示 1970-2000

 

。参数 time 

 

被解析的字符串,格式根据 GNU 

Date 
    //Input Formats 

 

语法 now 

 

 

用来计算返回值的时间戳 返回值 成功则返回时间戳,否则返

 

回 FALSE  

    //

 

在 PHP 5.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

 

中的文件名

function getdirname($path){ 
if(strpos($path,'\')!==false){ 
  //strrpos 查找匹配字符串出现的最后位置;没找到,返回 False 
  return substr($path,0,strrpos($path,'\')); 

}elseif(strpos($path,'/')!==false){ 
  return substr($path,0,strrpos($path,'/')); 

}else{ 
  return '/'; 


?> 

data\sql_config.php
QUOTE:

//

 

此文件内容为论坛数据库配置信息,以及插件创始人信息

/** 
* 以下变量需根据您的

服务器

 

说明档修改

*/ 
$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

 

直接显示) 相关文件(前台程序文件,后台程序文件,前台模板文件,后台模板文