0

0

DZ论坛核心代码分析-核心文件global.func.php篇_PHP教程

php中文网

php中文网

发布时间:2016-07-21 14:57:06

|

1498人浏览过

|

来源于php中文网

原创

请看上一篇:DZ论坛核心代码分析计划--install包篇

用了两天时间才把global.func.php分析完。还打算3天把common.inc.php文件整完,发现又分出来很多文件。所以这一次帖子改变一下策略。先上global.func.php文件的分析吧。。分析得不好。很多东西我没搞明白到底干嘛用的。。。甚至发现几个在整个DZ的文件系统中都没引用的函数。可能是测试函数吧。不过挺好用的。自己拿了放自己的函数包里了。
因为这个包代码很多。只把个人重要的仔细分析了每个代码块。
在上一个文分析计划里,我其实少上两个文件,一个是DZ论坛全局变量申明表。DZ论坛文件作用表。DZ论坛函数调用处表。
因为分析的东西暂时比较少,所以没有上上来。等全部搞完再说吧。
学习日记如下:

只更新一部分。。。。还有另一部分。。下午更新上来

以下为引用的内容:
Golbal.func.php
       日记时间:2008年10月7日10:37:34
1、 这个文件是常被引用的文件,所以开头还是采用了惯用的常量判断法。防止被恶意浏览器直接打开
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有和自定义常量:$_SERVER['HTTP_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", $_SERVER['HTTP_USER_AGENT'])) {

define('IS_ROBOT', FALSE);

} elseif(preg_match("/($kw_spiders)/i", $_SERVER['HTTP_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()获取的。

更新错误:这些错误是我分析在其调用的地方得知的错误。但不可能我发现一点改一点,所以在这里说明

随变
随变

抖音打造的潮流玩法社区App

下载
以下为引用的内容:checklowerlimit():这个函数是用来检查积分限制的

谢谢下面这些人的帮助

以下为引用的内容:
dongxin1390008说:daddslashes函数是检查php.ini文件的'MAGIC_QUOTES_GPC选项是否打开,若这个关闭,很容易的可以进行sql注射,若关闭了,则使用addslashes对单引号,# 号进行转义 2008-10-6 17:33:30更新附件包将此注释加入

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/364108.htmlTechArticle请看上一篇:DZ论坛核心代码分析计划--install包篇 用了两天时间才把global.func.php分析完。还打算3天把common.inc.php文件整完,发现又分出来很...

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

928

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

307

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

183

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

29

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

103

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

54

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

17

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

764

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

92

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
麻省理工大佬Python课程
麻省理工大佬Python课程

共34课时 | 5.3万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

550W粉丝大佬手把手从零学JavaScript
550W粉丝大佬手把手从零学JavaScript

共1课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号