插件作者的标准出来了!Manyou诚邀开发者加盟!
“互联网平台开发者”特刊 有奖征集开发者
立即免费下载 Discuz!6.1.0正式版
Discuz! 6.1.0 使用说明
Discuz!NT2.5正式版发布
开放源码下载
UCenter Home 1.2 正式版发布
官方站 | 帮助文档
基于ECShop的网店托管-卖否
PHP就业培训直通车 | LAMP培训大连
Discuz!收费服务内容及价格
《站长》杂志读者调查表
Discuz!/ECShop 专用官方虚拟主机
Insenz最新活动精美礼品大派送!
Comsenz 招聘信息
网店系统ECShop v2.6.0正式版火热发布
基于Discuz!的免费论坛空间5D6D
《站长》第七期:2008SNS进行时
 35 1234
发新话题
打印

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

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

上午发表了include/common.inc.php这个文件的分析,现在花了几个小时写完了include/global.func.php的注释了,考虑到这个文件是论坛的重要函数,函数我们关注的更多的它的接口,过程不是太关注,所以我就没有在过程上花功夫了,写了所有的函数的标准注释,应该一看在眼就懂的吧?

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

第一部分:http://www.discuz.net/viewthread.php?tid=612193
第二部分:http://www.discuz.net/viewthread.php?tid=612195
第三部分:http://www.discuz.net/viewthread.php?tid=612197
引用:
申明下版权:
1.这里面的每个中文字都是我打的,code部分是引用的,当然我也加了一点注释在里面了。
2.如果要转载的话请注明
复制内容到剪贴板
代码:
转自[url]www.discuz.net[/url] 作者:郭鑫
3.由于我个人的能力有限,写这篇文章没有参考一点资料,甚至连本地环境也没有搭建(遇到了白屏问题),所以难免会有错误的地方,大家发现了的话请跟帖或者联系我吧,我会尽快更正。
复制内容到剪贴板
代码:
if(!defined('IN_DISCUZ')) {
        exit('Access Denied');
}
//防非法引用的
复制内容到剪贴板
代码:
/**
* 这一个部分是生成discuz authcode的,用的是base64加密,分别能加密和解密。通过传入$operation = 'ENCODE'|'DECODE'来实现。
* @para string $string 要加/解密的string
* @para string $operation 方法(个人觉得用boolean比较好)
* @para string $key 用来加密的key
*
* @return string
*/

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

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

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

        $rndkey = $box = array();
        $result = '';

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

        for($j = $i = 0; $i < 256; $i++) {
                $j = ($j + $box[$i] + $rndkey[$i]) % 256;
                $tmp = $box[$i];
                $box[$i] = $box[$j];
                $box[$j] = $tmp;
        }

        for($a = $j = $i = 0; $i < $string_length; $i++) {
                $a = ($a + 1) % 256;
                $j = ($j + $box[$a]) % 256;
                $tmp = $box[$a];
                $box[$a] = $box[$j];
                $box[$j] = $tmp;
                $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
        }

        if($operation == 'DECODE') {
                if(substr($result, 0, 8) == substr(md5(substr($result, 8).$key), 0, 8)) {
                        return substr($result, 8);
                } else {
                        return '';
                }
        } else {
                return str_replace('=', '', base64_encode($result));
        }

}
复制内容到剪贴板
代码:
/**
* 这个是用来清除所有的cookie的
*/

function clearcookies() {
        global $discuz_uid, $discuz_user, $discuz_pw, $discuz_secques, $adminid, $credits;
        dsetcookie('sid', '', -86400 * 365);
        dsetcookie('auth', '', -86400 * 365);
        dsetcookie('visitedfid', '', -86400 * 365);
        dsetcookie('onlinedetail', '', -86400 * 365, 0);

        $discuz_uid = $adminid = $credits = 0;
        $discuz_user = $discuz_pw = $discuz_secques = '';
}
复制内容到剪贴板
代码:
/**
* 用来检查积分的最低要求的
* @para array $creditsarray 传入积分数组
* @para int $coef 单位
*/

function checklowerlimit($creditsarray, $coef = 1) {
        if(is_array($creditsarray)) {
                global $extcredits, $id;
                foreach($creditsarray as $id => $addcredits) {
                        if($addcredits * $coef < 0 && $GLOBALS['extcredits'.$id] - $addcredits < $extcredits[$id]['lowerlimit']) {
                                showmessage('credits_policy_lowerlimit');
                        }
                }
        }
}
复制内容到剪贴板
代码:
/**
* 用来完美分词的,也就是把一段中文字只取前面一段,再加一个…
* @para string $string 用来分词的串
* @para int $length 保留的长度
* @para string $dot 最后加点什么
*
* @return string
*/

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

        if(strlen($string) <= $length) {
                return $string;
        }

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

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

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

                        $t = ord($string[$n]);
                        if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
                                $tn = 1; $n++; $noc++;
                        } elseif(194 <= $t && $t <= 223) {
                                $tn = 2; $n += 2; $noc += 2;
                        } elseif(224 <= $t && $t < 239) {
                                $tn = 3; $n += 3; $noc += 2;
                        } elseif(240 <= $t && $t <= 247) {
                                $tn = 4; $n += 4; $noc += 2;
                        } elseif(248 <= $t && $t <= 251) {
                                $tn = 5; $n += 5; $noc += 2;
                        } elseif($t == 252 || $t == 253) {
                                $tn = 6; $n += 6; $noc += 2;
                        } else {
                                $n++;
                        }

                        if($noc >= $length) {
                                break;
                        }

                }
                if($noc > $length) {
                        $n -= $tn;
                }

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

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

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

        return $strcut.$dot;
}
复制内容到剪贴板
代码:
/**
* 用来过滤字串的,之所以要这样一个函数是考虑到是不是打开了magic_quotes_gpc.
* @para string $string 要过滤的字串
* @para int $force 强制过滤
*
* @return string
*/

function daddslashes($string, $force = 0) {
        !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
        if(!MAGIC_QUOTES_GPC || $force) {
                if(is_array($string)) {
                        foreach($string as $key => $val) {
                                $string[$key] = daddslashes($val, $force);
                        }
                } else {
                        $string = addslashes($string);
                }
        }
        return $string;
}
复制内容到剪贴板
代码:
/**
* 检查一个日期是否合法
* @para string $ymd 日期字串
* @para string $sep 分隔符
*
* @return boolean
*/

function datecheck($ymd, $sep='-') {
        if(!empty($ymd)) {
                list($year, $month, $day) = explode($sep, $ymd);
                return checkdate($month, $day, $year);
        } else {
                return FALSE;
        }
}
复制内容到剪贴板
代码:
/**
* 用来计算程序运行时间的,论坛底部的debug info
*
* @return boolean
*/
function debuginfo() {
        if($GLOBALS['debug']) {
                global $db, $discuz_starttime, $debuginfo;
                $mtime = explode(' ', microtime());
                $debuginfo = array('time' => number_format(($mtime[1] + $mtime[0] - $discuz_starttime), 6), 'queries' => $db->querynum);
                return TRUE;
        } else {
                return FALSE;
        }
}
复制内容到剪贴板
代码:
/**
* 强制退出
* @para string $message
*
*/
function dexit($message = '') {
        echo $message;
        output();
        exit();
}
复制内容到剪贴板
代码:
/**       
* 过滤HTML代码的
* @para string $string
*
* @return string
*/
function dhtmlspecialchars($string) {
        if(is_array($string)) {
                foreach($string as $key => $val) {
                        $string[$key] = dhtmlspecialchars($val);
                }
        } else {
                $string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1',
                str_replace(array('&', '"', '<', '>'), array('&', '"', '&lt;', '&gt;'), $string));
        }
        return $string;
}
复制内容到剪贴板
代码:
/**
* 用来设置header的
* @para string $string
* @para boolean $replace
* @para int $http_reponse_code
*
*/

function dheader($string, $replace = true, $http_response_code = 0) {
        $string = str_replace(array("\r", "\n"), array('', ''), $string);
        header($string, $replace, $http_response_code); //直接设置header
        if(preg_match('/^\s*location:/is', $string)) { //如果不符合location开头的话就exit了
                exit();
        }
}
复制内容到剪贴板
代码:
/**
* 判断是不是文件上传了
* @return boolean
*/

function disuploadedfile($file) {
        return function_exists('is_uploaded_file') && (is_uploaded_file($file) || is_uploaded_file(str_replace('\\\\', '\\', $file)));
}
[ 本帖最后由 郭鑫 于 2007-5-4 01:23 编辑 ]
本帖最近评分记录
复制内容到剪贴板
代码:
/**
* 用来得到上一个页面的地址,也就是来路。
* @para string $default 这个参数是直接设置一个refer,不用判断得到
*
* @return string
*/

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

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

        if(!preg_match("/(\.php|[a-z]+(\-\d+)+\.html)/", $referer) || strpos($referer, 'logging.php')) {
                $referer = $default;
        }
        return $referer;
}
复制内容到剪贴板
代码:
/**
* 设置cookie用的,我觉得这个和clearcookies放到一起比较好,不过好像这个是按字母排的…
* @para string $var cookie名
* @para string $value cookie值
* @para int $life 生存时间
* @para int $prefix cookie前缀
*
*/

function dsetcookie($var, $value, $life = 0, $prefix = 1) {
        global $cookiepre, $cookiedomain, $cookiepath, $timestamp, $_SERVER;
        //echo $prefix."--".$var."--".$value."--".$life."--".$cookiepath;
       
        setcookie(($prefix ? $cookiepre : '').$var, $value,
                $life ? $timestamp + $life : 0, $cookiepath,
                $cookiedomain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);
}
复制内容到剪贴板
代码:
/**
* 删除论坛的附件用的
* @para string $filename 附件名
* @para int $havethumb 是否有缩略图
* @para int $remote 是否为远程附件
*
*/

function dunlink($filename, $havethumb = 0, $remote = 0) {
        global $authkey, $ftp, $attachdir;
        if($remote) {
                require_once DISCUZ_ROOT.'./include/ftp.func.php';
                if(!$ftp['connid']) {
                        if(!($ftp['connid'] = dftp_connect($ftp['host'], $ftp['username'], authcode($ftp['password'], 'DECODE', md5($authkey)), $ftp['attachdir'], $ftp['port'], $ftp['ssl']))) {
                                return;
                        }
                }
                dftp_delete($ftp['connid'], $filename);
                $havethumb && dftp_delete($ftp['connid'], $filename.'.thumb.jpg');
        } else {
                @unlink($attachdir.'/'.$filename);
                $havethumb && @unlink($attachdir.'/'.$filename.'.thumb.jpg');
        }
}
复制内容到剪贴板
代码:
/**
* 生成email连接用的,比如把[email]nicollelord@yahoo.com[/email]换成:<a href="mailto:nicollelord@yahoo.com">nicollelord@yahoo.com</a>这样的形式
* @para string $email
* @para int $tolink
*/

function emailconv($email, $tolink = 1) {
        $email = str_replace(array('@', '.'), array('&#64;', '&#46;'), $email);
        return $tolink ? '<a href="mailto: '.$email.'">'.$email.'</a>': $email;
}
复制内容到剪贴板
代码:
/**
* 记录错误日志用的
* @para string $type 错误类型
* @para string $message 错误内容
* @para int $halt 发生错误后是不是就马上停止论坛的运行
*
*/

function errorlog($type, $message, $halt = 1) {
        global $timestamp, $discuz_userss, $onlineip, $_SERVER;
        $user = empty($discuz_userss) ? '' : $discuz_userss.'<br>';
        $user .= $onlineip.'|'.$_SERVER['REMOTE_ADDR'];
        writelog('errorlog', dhtmlspecialchars("$timestamp\t$type\t$user\t".str_replace(array("\r", "\n"), array(' ', ' '), trim($message))));
        if($halt) {
                dexit();
        }
}
复制内容到剪贴板
代码:
/**
* 判断访问者是不是robot
*
* @return boolean
*/

function getrobot() {
        if(!defined('IS_ROBOT')) {
                $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
                $kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';
                if(preg_match("/($kw_browsers)/", $_SERVER['HTTP_USER_AGENT'])) {
                        define('IS_ROBOT', FALSE);
                } elseif(preg_match("/($kw_spiders)/", $_SERVER['HTTP_USER_AGENT'])) {
                        define('IS_ROBOT', TRUE);
                } else {
                        define('IS_ROBOT', FALSE);
                }
        }
        return IS_ROBOT;
}
复制内容到剪贴板
代码:
/**
* 得到一个文件的扩展名
* @para string $filename
*
* @return string
*/

function fileext($filename) {
        return trim(substr(strrchr($filename, '.'), 1, 10));
}
复制内容到剪贴板
代码:
/**
* 用当前时间,会员名,uid,密码,authkey生成一个form hash(哈希)
*
* @return string
*/

function formhash() {
        global $discuz_user, $discuz_uid, $discuz_pw, $timestamp, $discuz_auth_key;
        return substr(md5(substr($timestamp, 0, -7).$discuz_user.$discuz_uid.$discuz_pw.$discuz_auth_key), 8, 8);
}
复制内容到剪贴板
代码:
/**
* 生成论坛访问权限的字串,以|隔开
* @para string $permstr 访问权限字串
*
* @return string
*/

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

        $groupidarray = array($groupid);
        foreach(explode("\t", $extgroupids) as $extgroupid) {
                if($extgroupid = intval(trim($extgroupid))) {
                        $groupidarray[] = $extgroupid;
                }
        }
        return preg_match("/(^|\t)(".implode('|', $groupidarray).")(\t|$)/", $permstr);
}
复制内容到剪贴板
代码:
/**
* 得到用户组,同步groupid和member['groupid'],当会员积分和当前积分不一致更新members表。
* @para int $uid 会员的uid
* @para array $group 会员所属的用户组
* @para array $member
*
* @return string
*/

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

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

                if($credits != $member['credits']) {
                        $updatearray[] = "credits='$credits'";
                }
                if($group['type'] == 'member' && !($member['credits'] >= $group['creditshigher'] && $member['credits'] < $group['creditslower'])) {
                        $query = $db->query("SELECT groupid FROM {$tablepre}usergroups WHERE type='member' AND $member[credits]>=creditshigher AND $member[credits]<creditslower LIMIT 1");
                        if($db->num_rows($query)) {
                                $member['groupid'] = $db->result($query, 0);
                                $updatearray[] = "groupid='$member[groupid]'";
                        }
                }

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

        return $member['groupid'];
}
复制内容到剪贴板
代码:
/**
* 这个的作用主要是把序列化后存在于数据库中的会员组到期信息取出来
* @para string $terms
* @para int $expiry
*/

function groupexpiry($terms) {
        $terms = is_array($terms) ? $terms : unserialize($terms);
        $groupexpiry = isset($terms['main']['time']) ? intval($terms['main']['time']) : 0;
        if(is_array($terms['ext'])) {
                foreach($terms['ext'] as $expiry) {
                        if((!$groupexpiry && $expiry) || $expiry < $groupexpiry) {
                                $groupexpiry = $expiry;
                        }
                }
        }
        return $groupexpiry;
}
复制内容到剪贴板
代码:
/**
* 看看一个ip是不是在允许访问的范围内
* @para string $ip
* @para array $accesslist
*
* @return boolean
*/

function ipaccess($ip, $accesslist) {
        return preg_match("/^(".str_replace(array("\r\n", ' '), array('|', ''), preg_quote($accesslist, '/')).")/", $ip);
}
复制内容到剪贴板
代码:
/**
* 判断ip是不是被ban了
* @para string $onlineip
*
* @return boolean
*/

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

        if($ipaccess && !ipaccess($onlineip, $ipaccess)) {
                return TRUE;
        }

        $cachelost .= (@include DISCUZ_ROOT.'./forumdata/cache/cache_ipbanned.php') ? '' : ' ipbanned';
        if(empty($_DCACHE['ipbanned'])) {
                return FALSE;
        } else {
                if($_DCACHE['ipbanned']['expiration'] < $timestamp) {
                        @unlink(DISCUZ_ROOT.'./forumdata/cache/cache_ipbanned.php');
                }
                return preg_match("/^(".$_DCACHE['ipbanned']['regexp'].")$/", $onlineip);
        }
}
复制内容到剪贴板
代码:
/**
* 检查一个email的合法性
* @para string $email
*
* @return boolean
*/

function isemail($email) {
        return strlen($email) > 6 && preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);
}
复制内容到剪贴板
代码:
/**
* Discuz语言解析用到的东西,即按照需要装入语言包这个数组
* @para string $file 语言文件(如:templates, email, actions等)
* @para int $templateid 用的是哪套模板中的,若没有的话用TEMPLATEID这个常数取代
* @para string $tpldir 模板所在的目录
*
* @return array or false
*/

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

        $languagepack = DISCUZ_ROOT.'./'.$tpldir.'/'.$file.'.lang.php';
        if(file_exists($languagepack)) {
                return $languagepack;
        } elseif($templateid != 1 && $tpldir != './templates/default') {
                return language($file, 1, './templates/default');
        } else {
                return FALSE;
        }
}
复制内容到剪贴板
代码:
/**
* 超经典的分页函数来了
* @para int $num 记录总数
* @para int $perpage 每页的记录数
* @para int $curpage 当前页
* @para string $mpurl 这个是用来保留query string中的参数的,打个比方:forumdisplay.php?fid=2,这个就是mpurl了,处理后会变成forumdisplay.php?fid=2&page=xx
* @para int $maxpages 最大的页数
* @para int $page 总页数
* @para int $simple 好像simple如果比一大的话就只有第一页,上一页,下一页,最后页
* @para string $onclick 点击触发的事件,AJAX用的。
*
* @return string
*/

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

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

                if($page > $pages) {
                        $from = 1;
                        $to = $pages;
                } else {
                        $from = $curpage - $offset;
                        $to = $from + $page - 1;
                        if($from < 1) {
                                $to = $curpage + 1 - $from;
                                $from = 1;
                                if($to - $from < $page) {
                                        $to = $page;
                                }
                        } elseif($to > $pages) {
                                $from = $pages - $page + 1;
                                $to = $pages;
                        }
                }

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

                $multipage .= ($curpage < $pages && !$simple ? '<a href="'.$mpurl.'page='.($curpage + 1).'" class="p_redirect"'.$onclick.'>&#8250;&#8250;</a>' : '').
                        ($to < $pages ? '<a href="'.$mpurl.'page='.$pages.'" class="p_redirect"'.$onclick.'>&#8250;|</a>' : '').
                        ($curpage == $maxpages ? '<a class="p_redirect" href="misc.php?action=maxpages&pages='.$maxpages.'">&#8250;?</a>' : '').
                        (!$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>' : '');

                $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>' : '';
        }
        return $multipage;
}
本帖最近评分记录
  • CS1.3 威望 +2 精品文章 2007-5-4 02:29
  • CS1.3 金币 +2 精品文章 2007-5-4 02:29
placeholder for update
来支持兄弟

慢慢看下

谢谢分享

厉害,小弟佩服,佩服

厉害,小弟佩服,佩服
小弟最近喜欢上PHP从ASP改行了,请问大侠这水平得要多久的修行  ???
同时喜欢上了实验室和网站,于是白天实验室晚上网站¥越城学府
强贴收藏,谢谢楼主分享研究成果。
有偿提供疑难数据恢复,定制转换,多论坛合并,discuzNT转discuz6服务。需要联系QQ466356742。MSN && EMAIL: bailetian@hotmail.com。每晚在线,加者说明来意,忙,非业务需要勿扰。
Discuz6.0论坛合并工具推荐   Discuz6.0论坛备份数据互补工具推荐   论坛转换网
引用:
原帖由 heanyu 于 2007-5-4 02:03 发表
厉害,小弟佩服,佩服
小弟最近喜欢上PHP从ASP改行了,请问大侠这水平得要多久的修行  ???
ASP别学了,学ASP.NET吧,我觉得.NET很不错,我现在就在学的。

接触PHP是从高二(2004)开始,正式学是从去年11月份开始。
引用:
* 这一个部分是生成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比较好。
C-BLOCK.COM.CN
原帖由 白乐天 于 2007-5-4 02:15 发表
强贴收藏,谢谢楼主分享研究成果。
 35 1234
发新话题
版块跳转