Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

史上第一强:Discuz!源代码分析系列(2)--./include/global.func.php(1)

[复制链接]
郭鑫 发表于 2007-5-4 01:10:57 | 显示全部楼层 |阅读模式
上午发表了include/common.inc.php这个文件的分析,现在花了几个小时写完了include/global.func.php的注释了,考虑到这个文件是论坛的重要函数,函数我们关注的更多的它的接口,过程不是太关注,所以我就没有在过程上花功夫了,写了所有的函数的标准注释,应该一看在眼就懂的吧?

还有就是这个文件实现是太大了,我不能发表一个帖子里,所以就拆分成了三个帖子来发……这样大家在看的时候也不至于看到郁闷吧。呵呵^^

第一部分:https://discuz.dismall.com/viewthread.php?tid=612193
第二部分:https://discuz.dismall.com/viewthread.php?tid=612195
第三部分:https://discuz.dismall.com/viewthread.php?tid=612197

申明下版权:
1.这里面的每个中文字都是我打的,code部分是引用的,当然我也加了一点注释在里面了。
2.如果要转载的话请注明
  1. 转自[url]discuz.dismall.com[/url] 作者:郭鑫
复制代码

3.由于我个人的能力有限,写这篇文章没有参考一点资料,甚至连本地环境也没有搭建(遇到了白屏问题),所以难免会有错误的地方,大家发现了的话请跟帖或者联系我吧,我会尽快更正。


  1. if(!defined('IN_DISCUZ')) {
  2.         exit('Access Denied');
  3. }
  4. //防非法引用的
复制代码



  1. /**
  2. * 这一个部分是生成discuz authcode的,用的是base64加密,分别能加密和解密。通过传入$operation = 'ENCODE'|'DECODE'来实现。
  3. * @para string $string 要加/解密的string
  4. * @para string $operation 方法(个人觉得用boolean比较好)
  5. * @para string $key 用来加密的key
  6. *
  7. * @return string
  8. */

  9. function authcode($string, $operation, $key = '') {

  10.         $key = md5($key ? $key : $GLOBALS['discuz_auth_key']);
  11.         $key_length = strlen($key);

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

  14.         $rndkey = $box = array();
  15.         $result = '';

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

  20.         for($j = $i = 0; $i < 256; $i++) {
  21.                 $j = ($j + $box[$i] + $rndkey[$i]) % 256;
  22.                 $tmp = $box[$i];
  23.                 $box[$i] = $box[$j];
  24.                 $box[$j] = $tmp;
  25.         }

  26.         for($a = $j = $i = 0; $i < $string_length; $i++) {
  27.                 $a = ($a + 1) % 256;
  28.                 $j = ($j + $box[$a]) % 256;
  29.                 $tmp = $box[$a];
  30.                 $box[$a] = $box[$j];
  31.                 $box[$j] = $tmp;
  32.                 $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
  33.         }

  34.         if($operation == 'DECODE') {
  35.                 if(substr($result, 0, 8) == substr(md5(substr($result, 8).$key), 0, 8)) {
  36.                         return substr($result, 8);
  37.                 } else {
  38.                         return '';
  39.                 }
  40.         } else {
  41.                 return str_replace('=', '', base64_encode($result));
  42.         }

  43. }
复制代码



  1. /**
  2. * 这个是用来清除所有的cookie的
  3. */

  4. function clearcookies() {
  5.         global $discuz_uid, $discuz_user, $discuz_pw, $discuz_secques, $adminid, $credits;
  6.         dsetcookie('sid', '', -86400 * 365);
  7.         dsetcookie('auth', '', -86400 * 365);
  8.         dsetcookie('visitedfid', '', -86400 * 365);
  9.         dsetcookie('onlinedetail', '', -86400 * 365, 0);

  10.         $discuz_uid = $adminid = $credits = 0;
  11.         $discuz_user = $discuz_pw = $discuz_secques = '';
  12. }
复制代码


  1. /**
  2. * 用来检查积分的最低要求的
  3. * @para array $creditsarray 传入积分数组
  4. * @para int $coef 单位
  5. */

  6. function checklowerlimit($creditsarray, $coef = 1) {
  7.         if(is_array($creditsarray)) {
  8.                 global $extcredits, $id;
  9.                 foreach($creditsarray as $id => $addcredits) {
  10.                         if($addcredits * $coef < 0 && $GLOBALS['extcredits'.$id] - $addcredits < $extcredits[$id]['lowerlimit']) {
  11.                                 showmessage('credits_policy_lowerlimit');
  12.                         }
  13.                 }
  14.         }
  15. }
复制代码


  1. /**
  2. * 用来完美分词的,也就是把一段中文字只取前面一段,再加一个…
  3. * @para string $string 用来分词的串
  4. * @para int $length 保留的长度
  5. * @para string $dot 最后加点什么
  6. *
  7. * @return string
  8. */

  9. function cutstr($string, $length, $dot = ' ...') {
  10.         global $charset;

  11.         if(strlen($string) <= $length) {
  12.                 return $string;
  13.         }

  14.         $string = str_replace(array('&', '"', '&lt;', '&gt;'), array('&', '"', '<', '>'), $string);

  15.         $strcut = '';
  16.         if(strtolower($charset) == 'utf-8') {

  17.                 $n = $tn = $noc = 0;
  18.                 while($n < strlen($string)) {

  19.                         $t = ord($string[$n]);
  20.                         if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
  21.                                 $tn = 1; $n++; $noc++;
  22.                         } elseif(194 <= $t && $t <= 223) {
  23.                                 $tn = 2; $n += 2; $noc += 2;
  24.                         } elseif(224 <= $t && $t < 239) {
  25.                                 $tn = 3; $n += 3; $noc += 2;
  26.                         } elseif(240 <= $t && $t <= 247) {
  27.                                 $tn = 4; $n += 4; $noc += 2;
  28.                         } elseif(248 <= $t && $t <= 251) {
  29.                                 $tn = 5; $n += 5; $noc += 2;
  30.                         } elseif($t == 252 || $t == 253) {
  31.                                 $tn = 6; $n += 6; $noc += 2;
  32.                         } else {
  33.                                 $n++;
  34.                         }

  35.                         if($noc >= $length) {
  36.                                 break;
  37.                         }

  38.                 }
  39.                 if($noc > $length) {
  40.                         $n -= $tn;
  41.                 }

  42.                 $strcut = substr($string, 0, $n);

  43.         } else {
  44.                 for($i = 0; $i < $length - strlen($dot) - 1; $i++) {
  45.                         $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
  46.                 }
  47.         }

  48.         $strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '&lt;', '&gt;'), $strcut);

  49.         return $strcut.$dot;
  50. }
复制代码


  1. /**
  2. * 用来过滤字串的,之所以要这样一个函数是考虑到是不是打开了magic_quotes_gpc.
  3. * @para string $string 要过滤的字串
  4. * @para int $force 强制过滤
  5. *
  6. * @return string
  7. */

  8. function daddslashes($string, $force = 0) {
  9.         !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
  10.         if(!MAGIC_QUOTES_GPC || $force) {
  11.                 if(is_array($string)) {
  12.                         foreach($string as $key => $val) {
  13.                                 $string[$key] = daddslashes($val, $force);
  14.                         }
  15.                 } else {
  16.                         $string = addslashes($string);
  17.                 }
  18.         }
  19.         return $string;
  20. }
复制代码


  1. /**
  2. * 检查一个日期是否合法
  3. * @para string $ymd 日期字串
  4. * @para string $sep 分隔符
  5. *
  6. * @return boolean
  7. */

  8. function datecheck($ymd, $sep='-') {
  9.         if(!empty($ymd)) {
  10.                 list($year, $month, $day) = explode($sep, $ymd);
  11.                 return checkdate($month, $day, $year);
  12.         } else {
  13.                 return FALSE;
  14.         }
  15. }
复制代码


  1. /**
  2. * 用来计算程序运行时间的,论坛底部的debug info
  3. *
  4. * @return boolean
  5. */
  6. function debuginfo() {
  7.         if($GLOBALS['debug']) {
  8.                 global $db, $discuz_starttime, $debuginfo;
  9.                 $mtime = explode(' ', microtime());
  10.                 $debuginfo = array('time' => number_format(($mtime[1] + $mtime[0] - $discuz_starttime), 6), 'queries' => $db->querynum);
  11.                 return TRUE;
  12.         } else {
  13.                 return FALSE;
  14.         }
  15. }
复制代码


  1. /**
  2. * 强制退出
  3. * @para string $message
  4. *
  5. */
  6. function dexit($message = '') {
  7.         echo $message;
  8.         output();
  9.         exit();
  10. }
复制代码


  1. /**       
  2. * 过滤HTML代码的
  3. * @para string $string
  4. *
  5. * @return string
  6. */
  7. function dhtmlspecialchars($string) {
  8.         if(is_array($string)) {
  9.                 foreach($string as $key => $val) {
  10.                         $string[$key] = dhtmlspecialchars($val);
  11.                 }
  12.         } else {
  13.                 $string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1',
  14.                 str_replace(array('&', '"', '<', '>'), array('&', '"', '&lt;', '&gt;'), $string));
  15.         }
  16.         return $string;
  17. }
复制代码


  1. /**
  2. * 用来设置header的
  3. * @para string $string
  4. * @para boolean $replace
  5. * @para int $http_reponse_code
  6. *
  7. */

  8. function dheader($string, $replace = true, $http_response_code = 0) {
  9.         $string = str_replace(array("\r", "\n"), array('', ''), $string);
  10.         header($string, $replace, $http_response_code); //直接设置header
  11.         if(preg_match('/^\s*location:/is', $string)) { //如果不符合location开头的话就exit了
  12.                 exit();
  13.         }
  14. }
复制代码

       

  1. /**
  2. * 判断是不是文件上传了
  3. * @return boolean
  4. */

  5. function disuploadedfile($file) {
  6.         return function_exists('is_uploaded_file') && (is_uploaded_file($file) || is_uploaded_file(str_replace('\\\\', '\\', $file)));
  7. }
复制代码

[ 本帖最后由 郭鑫 于 2007-5-4 01:23 编辑 ]

评分

2

查看全部评分

 楼主| 郭鑫 发表于 2007-5-4 01:12:04 | 显示全部楼层

  1. /**
  2. * 用来得到上一个页面的地址,也就是来路。
  3. * @para string $default 这个参数是直接设置一个refer,不用判断得到
  4. *
  5. * @return string
  6. */

  7. function dreferer($default = '') {
  8.         global $referer, $indexname;

  9.         $default = empty($default) ? $indexname : '';
  10.         if(empty($referer) && isset($GLOBALS['_SERVER']['HTTP_REFERER'])) {
  11.                 $referer = preg_replace("/([\?&])((sid\=[a-z0-9]{6})(&|$))/i", '\\1', $GLOBALS['_SERVER']['HTTP_REFERER']);
  12.                 $referer = substr($referer, -1) == '?' ? substr($referer, 0, -1) : $referer;
  13.         } else {
  14.                 $referer = dhtmlspecialchars($referer);
  15.         }

  16.         if(!preg_match("/(\.php|[a-z]+(\-\d+)+\.html)/", $referer) || strpos($referer, 'logging.php')) {
  17.                 $referer = $default;
  18.         }
  19.         return $referer;
  20. }
复制代码

       

  1. /**
  2. * 设置cookie用的,我觉得这个和clearcookies放到一起比较好,不过好像这个是按字母排的…
  3. * @para string $var cookie名
  4. * @para string $value cookie值
  5. * @para int $life 生存时间
  6. * @para int $prefix cookie前缀
  7. *
  8. */

  9. function dsetcookie($var, $value, $life = 0, $prefix = 1) {
  10.         global $cookiepre, $cookiedomain, $cookiepath, $timestamp, $_SERVER;
  11.         //echo $prefix."--".$var."--".$value."--".$life."--".$cookiepath;
  12.        
  13.         setcookie(($prefix ? $cookiepre : '').$var, $value,
  14.                 $life ? $timestamp + $life : 0, $cookiepath,
  15.                 $cookiedomain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);
  16. }
复制代码


  1. /**
  2. * 删除论坛的附件用的
  3. * @para string $filename 附件名
  4. * @para int $havethumb 是否有缩略图
  5. * @para int $remote 是否为远程附件
  6. *
  7. */

  8. function dunlink($filename, $havethumb = 0, $remote = 0) {
  9.         global $authkey, $ftp, $attachdir;
  10.         if($remote) {
  11.                 require_once DISCUZ_ROOT.'./include/ftp.func.php';
  12.                 if(!$ftp['connid']) {
  13.                         if(!($ftp['connid'] = dftp_connect($ftp['host'], $ftp['username'], authcode($ftp['password'], 'DECODE', md5($authkey)), $ftp['attachdir'], $ftp['port'], $ftp['ssl']))) {
  14.                                 return;
  15.                         }
  16.                 }
  17.                 dftp_delete($ftp['connid'], $filename);
  18.                 $havethumb && dftp_delete($ftp['connid'], $filename.'.thumb.jpg');
  19.         } else {
  20.                 @unlink($attachdir.'/'.$filename);
  21.                 $havethumb && @unlink($attachdir.'/'.$filename.'.thumb.jpg');
  22.         }
  23. }
复制代码


  1. /**
  2. * 生成email连接用的,比如把[email]nicollelord@yahoo.com[/email]换成:<a href="mailto:nicollelord@yahoo.com">nicollelord@yahoo.com</a>这样的形式
  3. * @para string $email
  4. * @para int $tolink
  5. */

  6. function emailconv($email, $tolink = 1) {
  7.         $email = str_replace(array('@', '.'), array('&#64;', '&#46;'), $email);
  8.         return $tolink ? '<a href="mailto: '.$email.'">'.$email.'</a>': $email;
  9. }
复制代码


  1. /**
  2. * 记录错误日志用的
  3. * @para string $type 错误类型
  4. * @para string $message 错误内容
  5. * @para int $halt 发生错误后是不是就马上停止论坛的运行
  6. *
  7. */

  8. function errorlog($type, $message, $halt = 1) {
  9.         global $timestamp, $discuz_userss, $onlineip, $_SERVER;
  10.         $user = empty($discuz_userss) ? '' : $discuz_userss.'<br>';
  11.         $user .= $onlineip.'|'.$_SERVER['REMOTE_ADDR'];
  12.         writelog('errorlog', dhtmlspecialchars("$timestamp\t$type\t$user\t".str_replace(array("\r", "\n"), array(' ', ' '), trim($message))));
  13.         if($halt) {
  14.                 dexit();
  15.         }
  16. }
复制代码

       

  1. /**
  2. * 判断访问者是不是robot
  3. *
  4. * @return boolean
  5. */

  6. function getrobot() {
  7.         if(!defined('IS_ROBOT')) {
  8.                 $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
  9.                 $kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';
  10.                 if(preg_match("/($kw_browsers)/", $_SERVER['HTTP_USER_AGENT'])) {
  11.                         define('IS_ROBOT', FALSE);
  12.                 } elseif(preg_match("/($kw_spiders)/", $_SERVER['HTTP_USER_AGENT'])) {
  13.                         define('IS_ROBOT', TRUE);
  14.                 } else {
  15.                         define('IS_ROBOT', FALSE);
  16.                 }
  17.         }
  18.         return IS_ROBOT;
  19. }
复制代码


  1. /**
  2. * 得到一个文件的扩展名
  3. * @para string $filename
  4. *
  5. * @return string
  6. */

  7. function fileext($filename) {
  8.         return trim(substr(strrchr($filename, '.'), 1, 10));
  9. }
复制代码
回复

使用道具 举报

 楼主| 郭鑫 发表于 2007-5-4 01:12:43 | 显示全部楼层

  1. /**
  2. * 用当前时间,会员名,uid,密码,authkey生成一个form hash(哈希)
  3. *
  4. * @return string
  5. */

  6. function formhash() {
  7.         global $discuz_user, $discuz_uid, $discuz_pw, $timestamp, $discuz_auth_key;
  8.         return substr(md5(substr($timestamp, 0, -7).$discuz_user.$discuz_uid.$discuz_pw.$discuz_auth_key), 8, 8);
  9. }
复制代码

       

  1. /**
  2. * 生成论坛访问权限的字串,以|隔开
  3. * @para string $permstr 访问权限字串
  4. *
  5. * @return string
  6. */

  7. function forumperm($permstr) {
  8.         global $groupid, $extgroupids;

  9.         $groupidarray = array($groupid);
  10.         foreach(explode("\t", $extgroupids) as $extgroupid) {
  11.                 if($extgroupid = intval(trim($extgroupid))) {
  12.                         $groupidarray[] = $extgroupid;
  13.                 }
  14.         }
  15.         return preg_match("/(^|\t)(".implode('|', $groupidarray).")(\t|$)/", $permstr);
  16. }
复制代码


  1. /**
  2. * 得到用户组,同步groupid和member['groupid'],当会员积分和当前积分不一致更新members表。
  3. * @para int $uid 会员的uid
  4. * @para array $group 会员所属的用户组
  5. * @para array $member
  6. *
  7. * @return string
  8. */

  9. function getgroupid($uid, $group, &$member) {
  10.         global $creditsformula, $db, $tablepre;

  11.         if(!empty($creditsformula)) {
  12.                 $updatearray = array();
  13.                 eval("\$credits = round($creditsformula);");

  14.                 if($credits != $member['credits']) {
  15.                         $updatearray[] = "credits='$credits'";
  16.                 }
  17.                 if($group['type'] == 'member' && !($member['credits'] >= $group['creditshigher'] && $member['credits'] < $group['creditslower'])) {
  18.                         $query = $db->query("SELECT groupid FROM {$tablepre}usergroups WHERE type='member' AND $member[credits]>=creditshigher AND $member[credits]<creditslower LIMIT 1");
  19.                         if($db->num_rows($query)) {
  20.                                 $member['groupid'] = $db->result($query, 0);
  21.                                 $updatearray[] = "groupid='$member[groupid]'";
  22.                         }
  23.                 }

  24.                 if($updatearray) {
  25.                         $db->query("UPDATE {$tablepre}members SET ".implode(', ', $updatearray)." WHERE uid='$uid'");
  26.                 }
  27.         }

  28.         return $member['groupid'];
  29. }
复制代码

  1. /**
  2. * 这个的作用主要是把序列化后存在于数据库中的会员组到期信息取出来
  3. * @para string $terms
  4. * @para int $expiry
  5. */

  6. function groupexpiry($terms) {
  7.         $terms = is_array($terms) ? $terms : unserialize($terms);
  8.         $groupexpiry = isset($terms['main']['time']) ? intval($terms['main']['time']) : 0;
  9.         if(is_array($terms['ext'])) {
  10.                 foreach($terms['ext'] as $expiry) {
  11.                         if((!$groupexpiry && $expiry) || $expiry < $groupexpiry) {
  12.                                 $groupexpiry = $expiry;
  13.                         }
  14.                 }
  15.         }
  16.         return $groupexpiry;
  17. }
复制代码


  1. /**
  2. * 看看一个ip是不是在允许访问的范围内
  3. * @para string $ip
  4. * @para array $accesslist
  5. *
  6. * @return boolean
  7. */

  8. function ipaccess($ip, $accesslist) {
  9.         return preg_match("/^(".str_replace(array("\r\n", ' '), array('|', ''), preg_quote($accesslist, '/')).")/", $ip);
  10. }
复制代码


  1. /**
  2. * 判断ip是不是被ban了
  3. * @para string $onlineip
  4. *
  5. * @return boolean
  6. */

  7. function ipbanned($onlineip) {
  8.         global $ipaccess, $timestamp, $cachelost;

  9.         if($ipaccess && !ipaccess($onlineip, $ipaccess)) {
  10.                 return TRUE;
  11.         }

  12.         $cachelost .= (@include DISCUZ_ROOT.'./forumdata/cache/cache_ipbanned.php') ? '' : ' ipbanned';
  13.         if(empty($_DCACHE['ipbanned'])) {
  14.                 return FALSE;
  15.         } else {
  16.                 if($_DCACHE['ipbanned']['expiration'] < $timestamp) {
  17.                         @unlink(DISCUZ_ROOT.'./forumdata/cache/cache_ipbanned.php');
  18.                 }
  19.                 return preg_match("/^(".$_DCACHE['ipbanned']['regexp'].")$/", $onlineip);
  20.         }
  21. }
复制代码


  1. /**
  2. * 检查一个email的合法性
  3. * @para string $email
  4. *
  5. * @return boolean
  6. */

  7. function isemail($email) {
  8.         return strlen($email) > 6 && preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);
  9. }
复制代码


  1. /**
  2. * Discuz语言解析用到的东西,即按照需要装入语言包这个数组
  3. * @para string $file 语言文件(如:templates, email, actions等)
  4. * @para int $templateid 用的是哪套模板中的,若没有的话用TEMPLATEID这个常数取代
  5. * @para string $tpldir 模板所在的目录
  6. *
  7. * @return array or false
  8. */

  9. function language($file, $templateid = 0, $tpldir = '') {
  10.         $tpldir = $tpldir ? $tpldir : TPLDIR;
  11.         $templateid = $templateid ? $templateid : TEMPLATEID;

  12.         $languagepack = DISCUZ_ROOT.'./'.$tpldir.'/'.$file.'.lang.php';
  13.         if(file_exists($languagepack)) {
  14.                 return $languagepack;
  15.         } elseif($templateid != 1 && $tpldir != './templates/default') {
  16.                 return language($file, 1, './templates/default');
  17.         } else {
  18.                 return FALSE;
  19.         }
  20. }
复制代码


  1. /**
  2. * 超经典的分页函数来了
  3. * @para int $num 记录总数
  4. * @para int $perpage 每页的记录数
  5. * @para int $curpage 当前页
  6. * @para string $mpurl 这个是用来保留query string中的参数的,打个比方:forumdisplay.php?fid=2,这个就是mpurl了,处理后会变成forumdisplay.php?fid=2&page=xx
  7. * @para int $maxpages 最大的页数
  8. * @para int $page 总页数
  9. * @para int $simple 好像simple如果比一大的话就只有第一页,上一页,下一页,最后页
  10. * @para string $onclick 点击触发的事件,AJAX用的。
  11. *
  12. * @return string
  13. */

  14. function multi($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 10, $simple = 0, $onclick = '') {
  15.         $multipage = '';
  16.         $mpurl .= strpos($mpurl, '?') ? '&' : '?';
  17.         $onclick = $onclick ? ' onclick="'.$onclick.'(event)"' : '';
  18.         if($num > $perpage) {
  19.                 $offset = 2;

  20.                 $realpages = @ceil($num / $perpage);
  21.                 $pages = $maxpages && $maxpages < $realpages ? $maxpages : $realpages;

  22.                 if($page > $pages) {
  23.                         $from = 1;
  24.                         $to = $pages;
  25.                 } else {
  26.                         $from = $curpage - $offset;
  27.                         $to = $from + $page - 1;
  28.                         if($from < 1) {
  29.                                 $to = $curpage + 1 - $from;
  30.                                 $from = 1;
  31.                                 if($to - $from < $page) {
  32.                                         $to = $page;
  33.                                 }
  34.                         } elseif($to > $pages) {
  35.                                 $from = $pages - $page + 1;
  36.                                 $to = $pages;
  37.                         }
  38.                 }

  39.                 $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="'.$mpurl.'page=1" class="p_redirect"'.$onclick.'>|&#8249;</a>' : '').
  40.                         ($curpage > 1 && !$simple ? '<a href="'.$mpurl.'page='.($curpage - 1).'" class="p_redirect">&#8249;&#8249;</a>' : '');
  41.                 for($i = $from; $i <= $to; $i++) {
  42.                         $multipage .= $i == $curpage ? '<a class="p_curpage">'.$i.'</a>' :
  43.                                 '<a href="'.$mpurl.'page='.$i.'" class="p_num"'.$onclick.'>'.$i.'</a>';
  44.                 }

  45.                 $multipage .= ($curpage < $pages && !$simple ? '<a href="'.$mpurl.'page='.($curpage + 1).'" class="p_redirect"'.$onclick.'>&#8250;&#8250;</a>' : '').
  46.                         ($to < $pages ? '<a href="'.$mpurl.'page='.$pages.'" class="p_redirect"'.$onclick.'>&#8250;|</a>' : '').
  47.                         ($curpage == $maxpages ? '<a class="p_redirect" href="misc.php?action=maxpages&pages='.$maxpages.'">&#8250;?</a>' : '').
  48.                         (!$simple && $pages > $page ? '<a class="p_pages" style="padding: 0px"><input class="p_input" type="text" name="custompage" onKeyDown="if(event.keyCode==13) {window.location=\''.$mpurl.'page=\'+this.value; return false;}"></a>' : '');

  49.                 $multipage = $multipage ? '<div class="p_bar">'.(!$simple ? '<a class="p_total">&nbsp;'.$num.'&nbsp;</a><a class="p_pages">&nbsp;'.$curpage.'/'.$realpages.'&nbsp;</a>' : '').$multipage.'</div>' : '';
  50.         }
  51.         return $multipage;
  52. }
复制代码

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 郭鑫 发表于 2007-5-4 01:18:40 | 显示全部楼层
placeholder for update
回复

使用道具 举报

qiaqiaxian 发表于 2007-5-4 01:20:36 | 显示全部楼层
来支持兄弟

慢慢看下

谢谢分享
回复

使用道具 举报

heanyu 发表于 2007-5-4 02:03:03 | 显示全部楼层

厉害,小弟佩服,佩服

厉害,小弟佩服,佩服
小弟最近喜欢上PHP从ASP改行了,请问大侠这水平得要多久的修行  ???
回复

使用道具 举报

白乐天 发表于 2007-5-4 02:15:53 | 显示全部楼层
强贴收藏,谢谢楼主分享研究成果。
回复

使用道具 举报

 楼主| 郭鑫 发表于 2007-5-4 09:33:27 | 显示全部楼层
原帖由 heanyu 于 2007-5-4 02:03 发表
厉害,小弟佩服,佩服
小弟最近喜欢上PHP从ASP改行了,请问大侠这水平得要多久的修行  ???


ASP别学了,学ASP.NET吧,我觉得.NET很不错,我现在就在学的。

接触PHP是从高二(2004)开始,正式学是从去年11月份开始。
回复

使用道具 举报

从儿 发表于 2007-5-25 11:30:51 | 显示全部楼层
* 这一个部分是生成discuz authcode的,用的是base64加密,分别能加密和解密。通过传入$operation = 'ENCODE'|'DECODE'来实现。
* @para string $string 要加/解密的string
* @para string $operation 方法(个人觉得用boolean比较好)
* @para string $key 用来加密的key
*
* @return string

这个部分我保留自己的意见,因为base64是一种非常不错的可逆编码,但是它并不能够列在加密的范畴,而authcode则实现了加密,$key为密码关键字。当DECODE的时候所给出的$key与加密时所使用的$key不同时,则不能实现解密,返回空字符串。另外用string型变量比boolean好,DECODE和ENCODE虽然是相对的两个步骤,但是你认为哪个设为true比较合理呢?而且在使用的时候容易混淆,因此我觉得还是用string比较好。
回复

使用道具 举报

玉城飞花 发表于 2007-5-25 18:23:05 | 显示全部楼层
原帖由 白乐天 于 2007-5-4 02:15 发表
强贴收藏,谢谢楼主分享研究成果。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-23 22:41 , Processed in 0.042212 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表