微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!
群组链接分析
<1>群组:------------查看:-----------------------------------------------------------------------------------------------------------------1.群组话题:          space.php?uid=1&do=thread   1.2热门话题:   space.php?uid=1&do=thread&view=hot   1.3最新话题:   space.php?uid=1&do=thread&view=new   1.4我的话题:   space.php?uid=1&do=thread&view=me   (补)1.5我回复的话题:。。。。。。  ******话题详细页:space.php?uid=1&do=thread&id=1 2.我参与的群组:              space.php?do=mtag&view=me    2.1话题数排行(默认):   space.php?do=mtag&view=me&fieldid=0&orderby=threadnum    2.2回帖数排行:           space.php?do=mtag&view=me&fieldid=0&orderby=postnum    2.3成员数排行:           space.php?do=mtag&view=me&fieldid=0&orderby=membernum3.我管理的群组:              space.php?do=mtag&view=manage    3.1话题数排行(默认):   space.php?do=mtag&view=manage&fieldid=0&orderby=threadnum    3.2回帖数排行:           space.php?do=mtag&view=manage&fieldid=0&orderby=postnum    3.3成员数排行:           space.php?do=mtag&view=manage&fieldid=0&orderby=membernum4.热门群组(默认):            space.php?do=mtag&view=hot    4.1话题数排行(默认):   space.php?do=mtag&view=hot&fieldid=0&orderby=threadnum    4.2回帖数排行:           space.php?do=mtag&view=hot&fieldid=0&orderby=postnum    4.3成员数排行:           space.php?do=mtag&view=hot&fieldid=0&orderby=membernum5.推荐群组:                    space.php?do=mtag&view=recommend    5.1话题数排行(默认):   space.php?do=mtag&view=recommend&fieldid=0&orderby=threadnum    5.2回帖数排行:           space.php?do=mtag&view=recommend&fieldid=0&orderby=postnum    5.3成员数排行:           space.php?do=mtag&view=recommend&fieldid=0&orderby=membernum6.搜索群组:   space.php?do=mtag&view=hot&searchkey=wjb&searchsubmit=%CB%D1%CB%F7%C8%BA%D7%E9&searchmode=1******群组详细页:        space.php?do=mtag&tagid=1*.1首页(默认):               space.php?do=mtag&tagid=1*.2讨论区:                    space.php?do=mtag&tagid=1&view=list*.3精华区:                    space.php?do=mtag&tagid=1&view=digest*.4成员列表:                 space.php?do=mtag&tagid=1&view=member(补)*.5群组活动:            space.php?do=mtag&tagid=1&view=event 编辑|管理:-----------------------------------------------------------------------------------------------------------------1.管理该成员:       <a href="cp.php?ac=mtag&op=manage&subop=member&tagid=1&uid=1"  id="a_mod_0" onclick="ajaxmenu(event, this.id, 1)" >管理该成员</a>         (页面)cp.php?ac=mtag&op=manage&subop=member&tagid=1&uid=1         (post) cp.php?ac=mtag&op=manage&tagid=1&subop=member&uid=1&grade=&group=&page=&start=2.创建群组:               cp.php?ac=mtag3.群组菜单:   3.1发起话题:       cp.php?ac=thread&tagid=1或cp.php?ac=thread   3.2发起活动:       cp.php?ac=event&tagid=1   3.3群组设置:       cp.php?ac=mtag&op=manage&tagid=1&subop=base   3.4成员管理:       cp.php?ac=mtag&op=manage&tagid=1&subop=members   3.5话题管理:       admincp.php?ac=thread&&perpage=20&tagid=1&searchsubmit=1   3.6回帖管理:       admincp.php?ac=post&&perpage=20&tagid=1&searchsubmit=1   3.7邀请好友:       cp.php?ac=mtag&op=manage&tagid=1&subop=invite   3.8退出群组:       cp.php?ac=mtag&op=out&tagid=1
discuz 经典php加密解密函数 authcode 解析
康盛的 authcode 函数可以说对中国的PHP界作出了重大贡献。包括康盛自己的产品,以及大部分中国使用PHP的公司都用这个函数进行加密,authcode 是使用异或运算进行加密和解密。原理如下,假如:加密明文:1010 1001密匙:1110 0011密文:0100 1010得出密文0100 1010,解密之需和密匙异或下就可以了解密密文:0100 1010密匙:1110 0011明文:1010 1001并没有什么高深的算法,密匙重要性很高,所以,关键在于怎么生成密匙。那我们一起看下康盛的authcode怎么做的吧Php代码// 参数解释   // $string: 明文 或 密文   // $operation:DECODE表示解密,其它表示加密   // $key: 密匙   // $expiry:密文有效期   function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {       // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙       $ckey_length = 4;              // 密匙       $key = md5($key ? $key : $GLOBALS['discuz_auth_key']);              // 密匙a会参与加解密       $keya = md5(substr($key, 0, 16));       // 密匙b会用来做数据完整性验证       $keyb = md5(substr($key, 16, 16));       // 密匙c用于变化生成的密文       $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';       // 参与运算的密匙       $cryptkey = $keya.md5($keya.$keyc);       $key_length = strlen($cryptkey);       // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),解密时会通过这个密匙验证数据完整性       // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确       $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;       $string_length = strlen($string);       $result = '';       $box = range(0, 255);       $rndkey = array();       // 产生密匙簿       for($i = 0; $i <= 255; $i++) {           $rndkey[$i] = ord($cryptkey[$i % $key_length]);        }       // 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度       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') {           // substr($result, 0, 10) == 0 验证数据有效性           // substr($result, 0, 10) - time() > 0 验证数据有效性           // substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) 验证数据完整性           // 验证数据有效性,请看未加密明文的格式           if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {               return substr($result, 26);            } else {               return '';            }        } else {           // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因           // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码           return $keyc.str_replace('=', '', base64_encode($result));        }   }  
discuz模板解析注释
代码  1 <?php  2   3 function parse_template($tplfile, $objfile) {  4 global $options;  5   6 //循环嵌套次数  7 $nest = 3;  8   9 //打开模板文件 10 if(!$fp = fopen($tplfile, ‘rb’)) { 11 exit(’Current template file not found or have no access!’); 12 } 13  14 $template = fread($fp, filesize($tplfile)); 15 fclose($fp); 16  17 //匹配变量 18 //双引号(单引号)内的具有转义所以,要得到一个必须写为\;要得到一个$必须写为$;最后结果为$,可在正则中使用的变量符号 19 $var_regexp = “((\$[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)([[a-zA-Z0-9_-.”’[]$x7f-xff]+])*)”; 20  21 //匹配字符 22 $const_regexp = “([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)”; 23  24 //清除缩进(tab) 25 $template = preg_replace(”/([nr]+)t+/s”, “\1“, $template); 26  27 //清除注释(<!– –>),方便后续操作,不需要匹配多余的<!– 28 $template = preg_replace(”/<!--{(.+?)}-->/s”, “{\1}”, $template); 29  30 //将{LF}替换成一个硬回车(n) 31 $template = str_replace(”{LF}”, “<?=”\n“?>”, $template); 32  33 //匹配多种变量形式,包括$xxx[”xxxx”]与$xxx[$xxx]、或$xxx 34 $template = preg_replace(”/{(\$[a-zA-Z0-9_[]’”$.x7f-xff]+)}/s”, “<?=\1?>”, $template); 35  36 //使用/e修正符,可使替换元素以php代码执行后,再进行replace. 37 $template = preg_replace(”/$var_regexp/es”, “addquote(’<?=\1?>’)”, $template); 38  39 //再次替换叠加字符串变量 40 $template = preg_replace(”/<?=<?=$var_regexp?>?>/es”, “addquote(’<?=\1?>’)”, $template); 41  42 //子模板嵌套解析 43 $template = preg_replace(”/[nrt]*{templates+([a-z0-9_]+)}[nrt]*/is”, “n<? include template(’\1′); ?>n”, $template); 44 $template = preg_replace(”/[nrt]*{templates+(.+?)}[nrt]*/is”, “n<? include template(\1); ?>n”, $template); 45  46 //eval语法解析 47 $template = preg_replace(”/[nrt]*{evals+(.+?)}[nrt]*/ies”, “stripvtags(’n<? \1; ?>n’,”)”, $template); 48  49 //echo语法解析 50 $template = preg_replace(”/[nrt]*{echos+(.+?)}[nrt]*/ies”, “stripvtags(’n<? echo \1; ?>n’,”)”, $template); 51  52 //elseif语法解析 53 $template = preg_replace(”/[nrt]*{elseifs+(.+?)}[nrt]*/ies”, “stripvtags(’n<? } elseif(\1) { ?>n’,”)”, $template); 54  55 //else语法解析 56 $template = preg_replace(”/[nrt]*{else}[nrt]*/is”, “n<? } else { ?>n”, $template); 57  58 for($i = 0; $i < $nest; $i++) { 59 $template = preg_replace(”/[nrt]*{loops+(S+)s+(S+)}[nr]*(.+?)[nr]*{/loop}[nrt]*/ies”, “stripvtags(’n<? if(is_array(\1)) { foreach(\1 as \2) { ?>’,'n\3n<? } } ?>n’)”, $template); 60 $template = preg_replace(”/[nrt]*{loops+(S+)s+(S+)s+(S+)}[nrt]*(.+?)[nrt]*{/loop}[nrt]*/ies”, “stripvtags(’n<? if(is_array(\1)) { foreach(\1 as \2 => \3) { ?>’,'n\4n<? } } ?>n’)”, $template); 61 $template = preg_replace(”/[nrt]*{ifs+(.+?)}[nr]*(.+?)[nr]*{/if}[nrt]*/ies”, “stripvtags(’n<? if(\1) { ?>’,'n\2n<? } ?>n’)”, $template); 62 } 63  64 //常量直接输出.. 65 $template = preg_replace(”/{$const_regexp}/s”, “<?=\1?>”, $template); 66  67 //相临定界符清除(使语法更加连贯) 68 $template = preg_replace(”/ ?>[nr]*<? /s”, ” “, $template); 69  70 if(!@$fp = fopen($objfile, ‘wb’)) { 71 exit(’Directory ’./cache/template/’ not found or have no access!’); 72 } 73  74 //转换链接中的&符号为&使编译模板读取时能够正常不会将其视为引用.. 75 $template = preg_replace(”/”(http)?[w./:]+?[^”]+?&[^”]+?”/e”, “transamp(’\0′)”, $template); 76  77 flock($fp, 2); 78 fwrite($fp, $template); 79 fclose($fp); 80 } 81  82 //转换&避免&以引用方式执行.. 83 function transamp($str) { 84 $str = str_replace(’&’, ‘&’, $str); 85 $str = str_replace(’&’, ‘&’, $str); 86 $str = str_replace(’”‘, ‘”‘, $str); 87 return $str; 88 } 89  90 //将$var字符串,转换为可执行的php代码形式,并返回其结果.. 91 //”转换为”,将为[xxx]转换为[’xxx’] 92 function addquote($var) { 93 return str_replace(”\”", “”", preg_replace(”/[([a-zA-Z0-9_-.x7f-xff]+)]/s”, “[’\1′]”, $var)); 94 } 95  96 //设置语言变量 97 function languagevar($var) { 98 return $GLOBALS[’language’][$var] ? $GLOBALS[’language’][$var] : “!$var!”; 99 }100 //清理或转换标签为php语法101 function stripvtags($expr, $statement) {102 $expr = str_replace(”\”", “”", preg_replace(”/<?=(\$.+?)?>/s”, “\1“, $expr));103 $statement = str_replace(”\”", “”", $statement);104 return $expr.$statement;105 }106 107 ?> 
discuz模板语法定义
Discuz! 的模板采用近似 PHP 表达式的语法,支持的元素如下:<!–{ … }–>逻辑元素包围符,该符号用于包含条件和循环元素条件判断<!--{if expr1}-->statement1<!--{elseif expr2}-->statement2<!--{else}-->statement3<!--{/if}-->这 是一个典型的条件模板,当条件 expr1 为真时,显示模板 statement1 内容,否则当 expr2 为真时,显示模板 statement2 内容,否则显示模板 statement3 的内容。如同其他语言中的条件控制一样,其中 <!–{elseif expr}–> 和 <!–{else} –> 是非必须的。不带下标变量的数组循环<!--{loop $array $value}-->statement<!--{/loop}-->相当于 PHP 的数组循环语句:foreach($array as $value) {statement}带下标变量的数组循环<!--{loop $array $key $value}-->statement<!--{/loop}-->相当于 PHP 的数组循环语句:foreach($array as $key => $value) {statement}逻 辑元素包围符在 { } 外面包含了 html 的注释符号 <!– –>,除了为了和信息元素相区别外,也方便了使用 Dreamweaver 和 Frontpage 之类工具编辑模板的用户。因逻辑元素会被识别为 html 的注释而不被显示,对于绝大多数用户,逻辑元素中的内容是完全不需要修改的,甚至修改错一个字符就可能引起错误信息和整个系统无法运行。因此通常您在修改 模板的时候,不要修改模板的逻辑信息,更不要将逻辑信息内部元素(如 <!–{else}–> 等)的前后位置作以修改,否则可能会导致错误。如果您的模板被不慎修改损坏,请立即用原标准默认模板覆盖,即可恢复。对于高手而言,实际上外部的 <!– –> 是可以省略不写的,可以用于某些元素在模板中的定位,但强烈建议普通用户不要轻易尝试。{ … }信息元素包围符{CONSTANT}可以引用界面替换变量,其中必须为大写字母,该符号实际的作用是引用 PHP 常量 CONSTANT,因此也可以通过它来引用其他的常量内容。{lang variable}可 以在模板中引用语言变量 variable 的内容,语言变量经由 templates.php.lang 中数组 $language 定义。如 {lang post_edit} 的内容在编译模板的时候被替换为 $language['post_edit'] 的内容,简体中文版的意思是“编辑帖子”。{template name}模板嵌入符,为了避免模板的冗长,可以使用本符号来将 name 模板的内容嵌入本模板中(实际上为引用)。{eval statement}运行 PHP 语句体 statement。推荐只在特别必须的时候才使用该结构,因为它会破坏模板的结构和可读性。如 {eval echo ‘template!’;} 实现的功能为 echo ‘template’;{LF}换行符,因为 Discuz! 模板引擎会忽略掉多余的换行(n),这个符号用来成生需要的 n。我 们所推荐的模板修改方法:通过普通编辑器手工书写 html 或通过 Dreamweaver 或 Frontpage 修改。但是修改需切记,同一逻辑元素内或嵌套中元素的位置和内容切勿修改,即通常情况下,您不能把 <!–{}–> 包围的内容单独的移动,更不能删除。但是整个最外部逻辑结构是可以移动或删除的。如果修改后模板所在页面在输出类似如下的错误信息 Parse error: parse error, unexpected ‘}’ in /home/username/forums/forumdata/templates/1_login.tpl.php on line 6,说明模板中出现了无法匹配,或格式错误的逻辑元素,请仔细检查是否有元素不对应,没有结束或嵌套损坏,格式错误的现象,必要时可以恢复原始模板来解决 问题。Discuz! 提供了方便的界面打包程序,前面已对其格式做了介绍,将导出信息的内容粘贴到 系统设置 中 风格方案 中的 导入界面方案 中,执行即可。程序会自动解析数据内容,恢复相关的界面设置,自定义替换变量和所需的模板设置。如果被导出界面使用了非默认模板,必须将 ./templates 目录属性设置为 777,以便导入程序自动建立模板记录和文件夹。定义变量说明<?exit?><!–{eval $i=2}–><!–{if $i==1}–>123<!–{/if}–><!–{block name=”spaceblog” parameter=”notype/1/order/i.dateline,i.lastpost/limit/0,14/cachetime/900 /cachename/newti/tpl/data”}–><!–最新日志–><!–{eval $i=0;}–><!–{loop $_SBLOCK['newti'] $value}–><!–{if $i % 2 == 0}–>//如果i除以2的余数等于0<div class=”listbg”><!–{else}–><div class=”listbg2″><!–{/if}–>· [<span class="listA">$value[typename]</span>]<aclass=”listA” href=”$value[url]” title=”$value[subjectall]” target=”_blank”>$value[subject]</a></div><!–{eval $i++;}–><!–{/loop}–><!–{eval for ($i=1; $i<=5; $i++){ }–><!–{eval echo “Hello World!<br />”;}–><!–{eval}}–> 
Discuz二次开发基本知识
一) Discuz!的文件系统目录注:想搞DZ开发,就得弄懂DZ中每个文件的功能。a) Admin:后台管理功能模块b) Api:DZ系统与其它系统之间接口程序c) Archiver:DZ中,用以搜索引擎优化的无图版d) Attachments:DZ中 ,用户上传附件的存放目录e) Customavatars:DZ中,用户自定义头像的目录f) Forumdata:DZ缓存数据的存放目录g) Images:DZ模板中的图片存放目录h) Include:DZ常用函数库,基本功能模块目录i) Ipdata:DZ统计IP来路用的数据j) Plugins:DZ插件信息的存放目录k) Templates:DZ模板文件的存放目录l) Wap:DZ无线,Wap程序处理目录二) 必须记熟Discuz!数据库设计的每个表的功能,每个表中每个字段的功能。关于DZ数据库设计文档,请参阅DZ相关的项目文档(请从本贴附件中下载)三) Discuz!的流程控制a)后台流程控:DZ后台所有的功能,均需要注册到admincp.php文件,每个功能都至少有一个或一个以上的Action(动作),在 admincp.php中,可以定义Action的执行权限,分别为:“admin==1”管理员,或“admin==2 ||admin==3”超级版主和版主,每个Action对应一个脚本文件,脚本文件的命名为action.inc.php(*.inc.php),并存 放在admin目录下,如执行:admincp.php?action=dodo,相当于执行admin目录下的dodo.inc.php文件b) 前台流程控制:前台的流程控制比较简单:流程是自由的,如:首页:index.php会员注册:register.php;会员登录:logging.php发贴程序:post.php会员信息:member.php论坛内容:forumdisplay.php查看贴子:viewthread.php…大部分功能,此处不一一列出…c) DZ根目下的config.inc.php属于整个DZ系统的配置文件四) Discuz!的数据处理过程a) DZ对mysql的数据库操作处理全部封装在dbstuff(db_mysql.class.php)类中b) 所在的外部数据均通过“daddslashes()”初步过滤,然后再过滤,再根据需要处理五) Discuz!的显示控制(网站多样式风格输出)a) 显示层就是大家通常所看到的网站风格了。DZ中每套风络分别在templates及images下对应一个风格文件的存放目录。网站风格的制作,请参阅详细的DZ风格制作文档b)DZ网站风格文件处理的原理:其实很简单,DZ使用template.func.php中的parse_template()以PHP正则运算把 htm模文件中的模板标签,转换成了PHP代码,并根据styleid保存在forumdata/templates下,这个有点像Smarty中的技 术。六) DZ中的语言处理a) DZ前台及后台中、英语言的实现,均是把语句定义成了语变量,然后在模板输入,语句变量的赋值,均放在模板目录中的*.lang.php文件中,DZ在生成网站风格时就加载了这相应的语言包。七) DZ如何处理用户信息(存取、计算、更新过程)新手要做二次开发,都必须掌握这数组中,每个数组元素的意义。a) DZ的基本信息,如用户信息,Session信息存在如下变量中:a). $_DCACHEb). $_COOKIEc). $_DCOOKIEd). $_DSESSIONe). $_DPLUGINb) 可以通过print_r($GLOBALS),打印全部变量八) DZ中缓存处理机制a) DZ中缓存处理过程都放在“cache.func.php”中,DZ的缓存处理比较简单,其原理是把一个数组转换成了PHP代码,并保存在缓存目录下,大家可打开缓存文件查看便知。b) 使用方法:如果在新开的功能中,需要缓存某部分数据,基本上就是:1)定义并注册缓存名字。2)从数据读取相应的数据。3)数据在写入缓存前作相应处理。4)最后写入缓存。具体操作,可以看文件中的代码,做相应的修改即可九) DZ中模板处理机制a) DZ独创的模板处理技术,类似于Smarty中的模板处理,只是具体算法,过程不同,Smarty是一种重型模板引擎方案。其原理都是把模板中的变量转换成相应的PHP代码,这个过程实际是模访JAVA中的一次编译,多处运行。十) DZ中权限处理机制a) 对于DZ中前台的每相action都有$discuz_action定义,DZ根据用户所在的用户组来判定用户是否具有相应操作$discuz_action的权限。至于后台的权限权验证,则更简单了,依据“admin==1”来确定的十一) DZ中如何实现URL静态化a) DZ中的静态有两法,只要懂ReWrite规划的朋友,一看就知。十二) DZ独创的HTML编辑器,如何截取并使用,如果进行Discuz!代和Html代码的转换a)这也算是DZ比较牛的一项技术了,在早期版中,因DZ编辑器的不足,使得很多用户放弃了DZ。实现原理:通过JS把用的一些操作转换成了DZ的 bbcode代码。这样子提交了安全性,将带有bbcode代码的内容存入数据,在用户打开页页时,又把bbcode代码转换成html代码本贴声明:由于时间有限,本贴只有关于DZ部分功能的简短分析。[Copy to clipboard] [ - ]CODE:部分文件说明:admincp.php 管理ajax.php ajax功能announcement.php 公告attachment 附件board.php 真正的首页config.inc.php 这个是配置文件corpus.php 论坛文集digest.php 精华帖子discuz_version.php 论坛版本号faq.php 问题列表forumdisplay.php 论坛列表index.php 跳转页面loggin.php 认证页面(登录退出)mail_config.inc.php 邮件配置member.php 用户操作memcp.php 个人控制面版misc.php 零碎功能my.php 我的帖子plugin.php 插件pm.php 短信post.php 发送帖子redirect.php 页面重定向register.php 注册robots.txt 限制搜索rss.php rss信息发布search.php 论坛查询secode.php 验证码stats.php 统计topic.php 首页论坛专题topicadmin 主题管理viewpro.php 显示个人信息viewthread.php 主题显示文件夹admin 管理api 接口archiver 文档attachments 附件customavatars 自定义表情forumdata 论坛数据包含缓冲数据images 图片include 公共文件install 安装包ipdata ip地址plugins 插件readme 帮助文档templates 模板utilities 工具包wap 手机网站文件夹includeadvertisements.inc.php 广告管理ajax.js ajax相关attachment.func.php 附件函数集bbscode.js 论坛表情cache.fun.php 缓存函数集category.inc.php 栏目chinese.class.phpcommon.inc.php 最主要的头文件common.js 最主要的js文件corpus.func.php 论坛文集函数counter.inc.php 论坛计数cron.func.php 计划任务db_mysql.class.php 数据库db_mysql_error.inc.php 数据库错误debug.php 调试信息discuzcode.func.php 论坛代码editor.func.php 编辑器editor.js 编辑器editpost.inc.php 编辑帖子floatadv.js 浮动广告forum.func.php 论坛函数集global.func.php 全局函数menu.js 菜单misc.func.php 其它newreply.inc.php 新回复newthread.inc.php 新主题*pmprompt.inc.phppost.fun.php 发表主题printable.inc.php 论坛打印qihoo.js qihoorelatethreads.inc.php 相关主题security.inc.php 安全sendmail.inc.php 邮件serverbusy.htm 系统繁忙template.func.php 模板threadpay.inc.php 购买帖子
Discuz!二次开发基本知识
必须至少具备如下技能:1) 能够理很好理解MVC构架的原理(虽然DZ不是MVC架构的)2) 扎实的PHP基础,熟悉结构化程序,OOP程序的写法及应用3)熟悉MYSQL就用,掌握SQL语言,懂SQL优化者更佳4) 熟悉使用Discuz!的各项功能一) Discuz!的文件系统目录注:想搞DZ开发,就得弄懂DZ中每个文件的功能。a) Admin:后台管理功能模块b) Api:DZ系统与其它系统之间接口程序c) Archiver:DZ中,用以搜索引擎优化的无图版d) Attachments:DZ中 ,用户上传附件的存放目录e) Customavatars:DZ中,用户自定义头像的目录f) Forumdata:DZ缓存数据的存放目录g) Images:DZ模板中的图片存放目录h) Include:DZ常用函数库,基本功能模块目录i) Ipdata:DZ统计IP来路用的数据j) Plugins:DZ插件信息的存放目录k) Templates:DZ模板文件的存放目录l) Wap:DZ无线,Wap程序处理目录二) 必须记熟Discuz!数据库设计的每个表的功能,每个表中每个字段的功能。关于DZ数据库设计文档,请参阅DZ相关的项目三) Discuz!的流程控制a) 后台流程控:DZ后台所有的功能,均需要注册到admincp.php文件,每个功能都至少有一个或一个以上的Action(动作),在admincp.php中,可以定义Action的执行权限,分别为:“admin==1”管理员,或“admin==2 admin==3”超级版主和版主,每个Action对应一个脚本文件,脚本文件的命名为action.inc.php(*.inc.php),并存放在admin目录下,如执行:admincp.php?action=dodo,相当于执行admin目录下的dodo.inc.php文件b) 前台流程控制:前台的流程控制比较简单:流程是自由的,如:首页:index.php会员注册:register.php;会员登录:logging.php发贴程序:post.php会员信息:member.php论坛内容:forumdisplay.php查看贴子:viewthread.php   …大部分功能,此处不一一列出…c) DZ根目下的config.inc.php属于整个DZ系统的配置文件 四) Discuz!的数据处理过程a) DZ对mysql的数据库操作处理全部封装在dbstuff(db_mysql.class.php)类中b) 所在的外部数据均通过“daddslashes()”初步过滤,然后再过滤,再根据需要处理五) Discuz!的显示控制(网站多样式风格输出)a) 显示层就是大家通常所看到的网站风格了。DZ中每套风络分别在templates及images下对应一个风格文件的存放目录。网站风格的制作,请参阅详细的DZ风格制作文档b) DZ网站风格文件处理的原理:其实很简单,DZ使用template.func.php中的parse_template()以PHP正则运算把htm模文件中的模板标签,转换成了PHP代码,并根据styleid保存在forumdata/templates下,这个有点像Smarty中的技术。六) DZ中的语言处理a) 前台及后台中、英语言的实现,均是把语句定义成了语变量,然后在模板输入,语句变量的赋值,均放在模板目录中的*.lang.php文件中,DZ在生成网站风格时就加载了这相应的语言包。七) DZ如何处理用户信息(存取、计算、更新过程)新手要做二次开发,都必须掌握这数组中,每个数组元素的意义。a) DZ的基本信息,如用户信息,Session信息存在如下变量中:a). $_DCACHEb). $_COOKIEc). $_DCOOKIEd). $_DSESSIONe). $_DPLUGINb) 可以通过print_r($GLOBALS),打印全部变量八) DZ中缓存处理机制a) DZ中缓存处理过程都放在“cache.func.php”中,DZ的缓存处理比较简单,其原理是把一个数组转换成了PHP代码,并保存在缓存目录下,大家可打开缓存文件查看便知。b)使用方法:如果在新开的功能中,需要缓存某部分数据,基本上就是:1)定义并注册缓存名字。2)从数据读取相应的数据。3)数据在写入缓存前作相应处理。4)最后写入缓存。具体操作,可以看文件中的代码,做相应的修改即可九) DZ中模板处理机制a) DZ独创的模板处理技术,类似于Smarty中的模板处理,只是具体算法,过程不同,Smarty是一种重型模板引擎方案。其原理都是把模板中的变量转换成相应的PHP代码,这个过程实际是模访JAVA中的一次编译,多处运行。十) DZ中权限处理机制a) 对于DZ中前台的每相action都有$discuz_action定义,DZ根据用户所在的用户组来判定用户是否具有相应操作$discuz_action的权限。至于后台的权限权验证,则更简单了,依据“admin==1”来确定的十一) DZ中如何实现URL静态化a) DZ中的静态有两法,只要懂ReWrite规划的朋友,一看就知。十二) DZ独创的HTML编辑器,如何截取并使用,如果进行Discuz!代和Html代码的转换a) 这也算是DZ比较牛的一项技术了,在早期版中,因DZ编辑器的不足,使得很多用户放弃了DZ。实现原理:通过JS把用的一些操作转换成了DZ的bbcode代码。这样子提交了安全性,将带有bbcode代码的内容存入数据,在用户打开页页时,又把bbcode代码转换成html代码   转自:http://www.discuz.net/forum.php?mod=viewthread&tid=636553&extra=%26page%3D1&page=1   
【Discuz 7.2】使用手记头像上传出错、不显示头像等
1、头像上传出错,提示“Access denied for agent changed” 解决办法:进后台管理》Ucenter》应用管理》Discuz应用提示“通信失败”》编辑》删除应用IP的内容(默认为127.0.0.1)》保存》回到应用管理界面,显示通信成功;测试头像上传功能,正常了 如仍有问题,参见Access denied for agent changed 的参考解决方法 2、帖子内容页面上,头像没有显示,如下图所示 Discuz帖子界面头像没有显示解决办法:后台管理》界面》界面设置》帖子内容页》是否显示作者头像 选“是”,顺便在这里把帖子相关的设置都修改了一下,改完保存,头像出来了,效果如下图: Discuz帖子界面头像有显示3、在个人中心的个人资料里找不到昵称设置 解决办法:后台设置》用户》用户组》某一用户组 详情》基本设置》允许使用昵称 选“是”》保存;好了,昵称可以设置了。竟然默认情况下大部分用户组是不允许设置昵称的。 4、允许用户切换论坛界面的风格 解决方法:后台设置》界面》风格管理》预览、安装、启用多个模板风格;后台设置》界面》界面设置》全局》显示风格切换按钮 选“是”》保存;风格切换按钮会显示了,如下图: Discuz 风格切换按钮在这里还可以设置论坛跳转菜单、左右分栏显示、浮动窗口等。 5、模板风格Logo替换 解决方法:需要对不同的模板做单独的替换或设置,视模板Logo图片的默认路径而定;有两种方法可以实现Logo替换。 方法一:重命名新的Logo图片文件名为模板默认的Logo图片文件名,并上传覆盖掉原来的图片文件。此法的优点是操作简单,多风格共用一个模板的 情况下(如系统原装的Colors模板即包括多个色调风格),只需要一步操作;缺点是文件后缀名受限,同一图片文件不一定适合多个色调风格,此操作可能需 要用户清空浏览器缓冲才能看到新的Logo。 方法二:上传新的Logo图片到模板图片文件夹下;后台设置》界面》风格管理》某一风格 编辑》论坛Logo 设定为新Logo图片的文件名》保存。此法优点是各风格独立设置Logo图片,符合风格特点,无需用户清空浏览器缓冲即可看到结果,保留了原Logo图片 文件;缺点是多风格共用一个模板的情况下需要一个个编辑风格。 推荐使用第二种方法。 6、论坛支持RSS输出 解决方法:后台设置》全局》论坛功能》其他》启用RSS 选“是”,设置好RSS TTL》保存;搞定。 启用后,在论坛版块界面的右上角会看到RSS的图标。7、启用WAP访问界面 解决方法:后台设置》全局》WAP设置》启用WAP 选“是”》保存;搞定。 8、论坛新手任务 解决方法:后台设置》扩展》论坛任务》管理》是否启用论坛任务 选“是” 勾选希望启用的新手任务并设置顺序》保存;特别说明:一个好汉三个帮、联络感情、我的第一次、回帖是一种美德4个新手任务在启用前都需要进行编辑、设定一些参数。注:新增加的新手任务只对之后新注册的用户有效,原来的用户不会看到新加的新手任务。9、论坛签到任务解决办法:方法一、每日抢楼签到插件,不少论坛为活跃气氛都用这个,有需要的自己搜一下。方法二、使用论坛任务功能实现签到任务;后台设置》扩展》论坛任务》添加》红包类任务》任务名称为“每日红包”、任务时间间隔为“24”小时、做好其他设置》提交;在任务管理里启用该任务,完成。10、其他设置用户组的设置如有疑问可参考Discuz! 多用户组分析及详解。其他常规设置基本上大家找找也能找到,就不列了。如果不知道在哪儿的话,在后台设置的右上角有个搜索框,可以搜索后台的设置项目,很方便。[完毕]
GD LINUX主机空间目录下没有提供htaccess文件!
GD LINUX主机空间目录下没有提供htaccess文件! 由于我的GD LINUX主机空间目录下没有提供htaccess文件,而我又想让我的站点支持伪静态,请大家提供一个htaccess文件(论坛上那个文件下载以后就是一个空文件,啥都没有)===============================================htaccess文件内容如下: # 将 RewriteEngine 模式打开 RewriteEngine On# 修改以下语句中的 /discuz 为你的论坛目录地址,如果程序放在根目录中,请将 /discuz 修改为 / RewriteBase /# Rewrite 系统规则请勿修改 RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^topic-(.+).html$ portal.php?mod=topic&topic=$1&%1 RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^article-([0-9]+)-([0-9]+).html$ portal.php?mod=view&aid=$1&page=$2&%1 RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^forum-(w+)-([0-9]+).html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1 RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+).html$ forum.php?mod=viewthread&tid=$1&extra=page%3D$3&page=$2&%1 RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^group-([0-9]+)-([0-9]+).html$ forum.php?mod=group&fid=$1&page=$2&%1 RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^space-(username|uid)-(.+).html$ home.php?mod=space&$1=$2&%1 RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^([a-z]+)-(.+).html$ $1.php?rewrite=$2&%1  ===========================================我是用了楼上的附件,再从DZ的后台,把论坛主题列表页 {fid}, {page}  forum-{fid}-{page}.html改为了forum-forumdisplay-fid-{fid}-page={page}.html后就好了     摘自:http://bbs.idcspy.com/viewthread.php?tid=154886&page=1#pid736087    
解决DISCUZ X1.5帖子标题80字符限制
DISCUZ X1.5帖子标题有个80字符限制,个人感觉字数少了些,何况UTF-8下一个汉字占了3个字节,DISCUZ X1.5主题标题80字符也就是限制最多只能用26个汉字。怎么修改这个呢?比如我要修改为120字view plaincopy to clipboardprint?// source/function/function_post.php  // 修改:  strlen($subject) > 80  // 为:  strlen($subject) > 120    // static/js/forum_post.js  // 修改:  mb_strlen(theform.subject.value) > 80  // 为:  mb_strlen(theform.subject.value) > 120  // 修改:  showDialog('您的标题超过 80 个字符的限制');  // 为:  showDialog('您的标题超过 120 个字符的限制');    // static/js/forum.js  // 修改:  mb_strlen(theform.subject.value) > 80  // 为:  mb_strlen(theform.subject.value) > 120  // 修改:  s = '您的标题超过 80 个字符的限制。';  // 为:  s = '您的标题超过 120 个字符的限制。';    // templates/default/forum/post.htm  // 修改:  strLenCalc(this, 'checklen', 80);  // 为:  strLenCalc(this, 'checklen', 120);  // 修改:  <strong id="checklen">80</strong>  // 为:  <strong id="checklen">120</strong>    // templates/default/forum/forumdisplay_fastpost.htm  // 修改:  strLenCalc(this, 'checklen', 80);  // 为:  strLenCalc(this, 'checklen', 120);  // 修改:  <strong id="checklen">80</strong>  // 为:  <strong id="checklen">120</strong>    // source/language/lang_message.php  // 修改:  'post_subject_toolong' => '对不起,你的标题超过 80 个字符'  // 为:  'post_subject_toolong' => '对不起,你的标题超过 120 个字符'