最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • DZ论坛核心代码分析-核心文件global.func.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 ? ‘<a href="mailto: ‘.$email.’">’.$email.'</a>’: $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()获取的。

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

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

    谢谢下面这些人的帮助

    以下为引用的内容:

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

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » DZ论坛核心代码分析-核心文件global.func.php篇

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级