Discuz 学习笔记.doc_第1页
Discuz 学习笔记.doc_第2页
Discuz 学习笔记.doc_第3页
Discuz 学习笔记.doc_第4页
Discuz 学习笔记.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Logo Herediscuz学习说明书绝对保密discuz学习笔记目 录W1文档目的32数据库32.1Discuz6.0数据字典33代码分析33.1discuz分析33.1.1文件结构分析33.1.2install分析43.1.3核心代码分析-global.func.php63.1.4核心文件common.inc.php篇93.1.5Include包分析9discuz学习说明书关键词:摘要:缩略语:缩略语英文说明中文说明1 文档目的定义平台的整体情况与相关程序。2 数据库2.1 Discuz6.0数据字典3 代码分析3.1 discuz分析3.1.1 文件结构分析./users_guide.htm 用户使用说明书(本文档)./usersguide/ 用户使用说明书内容与图片目录./upload/ 程序及相关文件(此目录中的内容需上传)*.php Discuz! 程序install.php Discuz! 安装脚本config.inc.php 论坛基本配置,安装前请修改本文件mail_config.inc.php 邮件发送配置whatsnew.php 网页新帖调用程序admin/ 系统设置程序目录*.php 系统设置程序集attachments/ 空目录,请设置属性 777,用于存放附件customavatars/ 空目录,请设置属性 777,用于存放上传头像forumdata/ 空目录,请设置属性 777,用于存放备份及记录数据templates/ 空目录,请设置属性 777,用于存放编译模板文件cache/ 空目录,请设置属性 777,用于存放系统缓存templates/ 模板文件目录default/ 系统默认模板目录*.htm 系统默认模板文件*.lang.php 系统默认语言包文件images/ 图片文件目录attachicons/ 附件图标图片目录avatars/ 论坛提供头像图片目录common/ 公用图片目录default/ 系统默认风格图片目录smilies/ Smilies 图片目录stats/ 流量统计图片目录include/ 引用包含目录*.php 引用包含程序集plugins/ 空目录,用于存放插件程序./utilities/ 论坛附带工具repair.php 数据库修复工具restore.php 分卷备份数据恢复工具testmail.php 邮件发送测试工具upgrade(x).php 论坛升级程序3.1.2 install分析1、在代码的顶部引入error_reporting()方法,设定php的错误提示等级。事实上php的配置文件可以配置,但是在每个文件重新设定这个错误提示等级,使错误提示更为灵活。2、在某些条件下通过使用set_time_limit()设定运行时间,并且通过ob_start()打开输出缓冲器。最好用来屏蔽错误。3、使用define()设定多个常量而不是变量供程序代码使用。分析文件:discuz_version.php文件作用:定义版权的常量值1、因为这个文件是被引入调用其设定好的常量。所以从理论上任何文件都能调用。所以在一开始通过判断是否IN_DISCUZ为真,如果不是,则停止整个程序的运行。2008年10月4日9:42:22分析文件db_mysql.class.php文件作用:数据库的链接类1、通过一个判断来决定是采用mysql_connect(非持续性)还是mysql_pconnect(持续性)2、通过判断来决定是采用mysql_unbuffered_query(执行操作,但不返回任何数据)还是mysql_query(执行操作,可返回数据)3、1和2两个经验点,大量使用了?:运算符;如:(exp1?(exp2):(exp3)).若exp1为真则exp2,反之exp3。4、/mysql_num_fields-取得结果集中字段的数目function num_fields($query) return mysql_num_fields($query);5、/释放结果内存function free_result($query) return mysql_free_result($query);2008年10月4日10:21:48总结:因为被包含文件可以通过路径进行访问,为了保护文件的安全性,DZ在所有需要引用其他文件的前面定义了一个常量IN_DISCUZ。在被引入文件的头部对这个常量进行判断,如果没有这个常量,也就是直接通过路径进行访问的。则不执行源代码中的任何部分。这是个很好的保护源代码措施。而且很简单。3.1.3 核心代码分析-global.func.php1、 这个文件是常被引用的文件,所以开头还是采用了惯用的常量判断法。防止被恶意浏览器直接打开2、 加密函数authcode中的加密有多次的md5叠加加密。保证密码的安全性。在常有的思维中,一般是只加密了一次。而在DZ的加密函数中。加密算法很复杂。分别从md5加密,字符随机截断加密,位运算加密和与密匙结合加密。3、 DZ的字符处理工作非常好。虽然在下载的时候我们会选择utf-8还是gbk。但是不管是处理字符还是处理数据库链接的时候都是第一考虑字符编码的地方。在db_mysql.class.php文件的数据库链接上就判断了格式是什么。代码如下$func = empty($pconnect) ? mysql_connect : mysql_pconnect;/建立一个链接给类的属性link之中。并且在建立链接的时候就设定编码方式是如何的。if(!$this-link = $func($dbhost, $dbuser, $dbpw, 1) $halt & $this-halt(Can not connect to MySQL server); else if($this-version() 4.1) global $charset, $dbcharset;$dbcharset = $dbcharset2 ? $dbcharset2 : $dbcharset;$dbcharset = !$dbcharset & in_array(strtolower($charset), array(gbk, big5, utf-8) ? str_replace(-, , $charset) : $dbcharset;$serverset = $dbcharset ? character_set_connection=.$dbcharset., character_set_results=.$dbcharset., character_set_client=binary : ;$serverset .= $this-version() 5.0.1 ? (empty($serverset) ? : ,).sql_mode=) : ;$serverset & mysql_query(SET $serverset, $this-link); 再在global.func.php文件中的字符串处理也是考虑了字符串的编码格式问题的。有个全局变量$charset就是用来设定编码格式的。Cutstr里根据这个变量的值来对字符串进行处理。另,在cutstr()函数里,在进行截断之前会将字符串中的特殊字符进行处理。$string = str_replace(array(&, , ), array(&, , ), $string);在处理截断之后,再将其还原。$strcut = str_replace(array(&, , ), array(&, , ), $strcut); 这就能解释为什么DZ论坛截断后的文字依然符合原有的文字格式。4、 对html代码格式自定义替换。但这里要注意一下DZ考虑得很周到。 if(is_array($string) foreach($string as $key = $val) $string$key = dhtmlspecialchars($val);/如果是数租,遍历数组再调用自身的这个函数对单个字符处理。判断如果传入的字符串是数组呢?恩。按我的想法是,只封装字符的替换部分。但他这里封装得很好。因为我在调用这个函数的时候就不用担心我传递的是什么格式的字符串了。5、 将页面跳转封装在了dheader函数里6、/典型的减少代码重复输入函数。处理好email字符串。只需要emailconv(email地址)就能返回一个已经编码好的email地址了function emailconv($email, $tolink = 1) $email = str_replace(array(, .), array(, .), $email);return $tolink ? .$email.: $email;7、/对文件名进行截断处理,输入文件名,返回处理后的文件名function fileext($filename) return trim(substr(strrchr($filename, .), 1, 10);8、DZ处理浏览器直接输入路径访问问题是用的判断常量法。但是机器人呢?机器人可没常量。但是php有和自定义常量:$_SERVERHTTP_USER_AGENT。这两个是用来判断机器人的名称的。里面还包含了名字。于是机器人的判断法如下:/通过分析调用这个函数的common.inc.php文件。这个函数是用来判断对机器人的处理方式的。function getrobot() if(!defined(IS_ROBOT) /定义搜索引擎名$kw_spiders = Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla;/定义浏览器种类名$kw_browsers = MSIE|Netscape|Opera|Konqueror|Mozilla;/判断是否是这些浏览器,如果是,则定义IS_ROBOT这个常量为假。反之则判断蜘蛛是不是上述已经定义好的搜索引擎,如果是则定义IS_ROBOT这个常量为真。如果都不满足条件,定义IS_ROBOT这个常量为假。if(preg_match(/($kw_browsers)/i, $_SERVERHTTP_USER_AGENT) define(IS_ROBOT, FALSE); elseif(preg_match(/($kw_spiders)/i, $_SERVERHTTP_USER_AGENT) define(IS_ROBOT, TRUE); else define(IS_ROBOT, FALSE);/返回IS_ROBOT这个常量的值return IS_ROBOT; 在common.inc.php文件里调用是这样处理的:/通过这个常量,不允许机器人随意访问这个页面。define(IS_ROBOT, getrobot();if(defined(NOROBOT) & IS_ROBOT) exit(header(HTTP/1.1 403 Forbidden);看回来还是常量法。只是这个常量的值是通过函数getrobot()获取的。3.1.4 核心文件common.inc.php篇这个文件是DZ的核心大脑级文件。真正分析起来,其实内容并不多。大多是条件判断和指挥类的语句。引入大量文件。理解这个文件可以更好的理解整个DZ的论坛是如何运作的。几乎每个页面都引入了这个文件的。说实话,越往后面看我头越大。大量的多层3维条件判断。嘿嘿,不知道说错没,就是?:这种类型的。有的镶嵌了4层之多。头晕啊。不过大致完成了。这个文件最值得学习的是其对安全性的重视和处理。下面先上写好注释的文件其他文件整理后随后发上来。不过这个足够说明很多东西了。写得不对的地方望各位高手指出3.1.5 Include包分析 cache.func.php缓存文件、XML.class.phpXML解析器、counter.inc.php论坛计数器、security.inc.php:安全信息等级.还有xmlparser.class.phpXML解析类。cache.func.php文件没分析完,但具体缓存的操作原理是将配置文件从数据库中取出,经过特定的处理后缓存进内存,再然后读取到各数据库或者页面之中。security这个文件就是防止多次刷新的安全信息等级文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论