日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > DZ論壇核心代碼分析-核心文件global.func.php篇

DZ論壇核心代碼分析-核心文件global.func.php篇

來源:程序員人生   發(fā)布時間:2014-01-14 12:21:07 閱讀次數(shù):2663次

請看上一篇:DZ論壇核心代碼分析計(jì)劃--install包篇

用了兩天時間才把global.func.php分析完。還打算3天把common.inc.php文件整完,發(fā)現(xiàn)又分出來很多文件。所以這一次帖子改變一下策略。先上global.func.php文件的分析吧。。分析得不好。很多東西我沒搞明白到底干嘛用的。。。甚至發(fā)現(xiàn)幾個在整個DZ的文件系統(tǒng)中都沒引用的函數(shù)。可能是測試函數(shù)吧。不過挺好用的。自己拿了放自己的函數(shù)包里了。
因?yàn)檫@個包代碼很多。只把個人重要的仔細(xì)分析了每個代碼塊。
在上一個文分析計(jì)劃里,我其實(shí)少上兩個文件,一個是DZ論壇全局變量申明表。DZ論壇文件作用表。DZ論壇函數(shù)調(diào)用處表。
因?yàn)榉治龅臇|西暫時比較少,所以沒有上上來。等全部搞完再說吧。
學(xué)習(xí)日記如下:

只更新一部分。。。。還有另一部分。。下午更新上來

以下為引用的內(nèi)容:
Golbal.func.php
       日記時間:2008年10月7日10:37:34
1、 這個文件是常被引用的文件,所以開頭還是采用了慣用的常量判斷法。防止被惡意瀏覽器直接打開
2、 加密函數(shù)authcode中的加密有多次的md5疊加加密。保證密碼的安全性。在常有的思維中,一般是只加密了一次。而在DZ的加密函數(shù)中。加密算法很復(fù)雜。分別從md5加密,字符隨機(jī)截?cái)嗉用埽贿\(yùn)算加密和與密匙結(jié)合加密。
3、 DZ的字符處理工作非常好。雖然在下載的時候我們會選擇utf-8還是gbk。但是不管是處理字符還是處理數(shù)據(jù)庫鏈接的時候都是第一考慮字符編碼的地方。在db_mysql.class.php文件的數(shù)據(jù)庫鏈接上就判斷了格式是什么。代碼如下
$func = empty($pconnect) ? 'mysql_connect' : 'mysql_pconnect';

//建立一個鏈接給類的屬性link之中。并且在建立鏈接的時候就設(shè)定編碼方式是如何的。

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就是用來設(shè)定編碼格式的。Cutstr里根據(jù)這個變量的值來對字符串進(jìn)行處理。
另,在cutstr()函數(shù)里,在進(jìn)行截?cái)嘀皶⒆址械奶厥庾址M(jìn)行處理。


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


在處理截?cái)嘀螅賹⑵溥€原。


$strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);
                     這就能解釋為什么DZ論壇截?cái)嗪蟮奈淖忠廊环显械奈淖指袷健?br />4、 對html代碼格式自定義替換。但這里要注意一下DZ考慮得很周到。

        if(is_array($string)) {

        foreach($string as $key => $val) {

        $string[$key] = dhtmlspecialchars($val);//如果是數(shù)租,遍歷數(shù)組再調(diào)用自身的這個函數(shù)對單個字符處理。

}
  判斷如果傳入的字符串是數(shù)組呢?恩。按我的想法是,只封裝字符的替換部分。但他這里封裝得很好。因?yàn)槲以谡{(diào)用這個函數(shù)的時候就不用擔(dān)心我傳遞的是什么格式的字符串了。
5、 將頁面跳轉(zhuǎn)封裝在了dheader函數(shù)里
6、//典型的減少代碼重復(fù)輸入函數(shù)。處理好email字符串。只需要emailconv(email地址)就能返回一個已經(jīng)編碼好的email地址了
function emailconv($email, $tolink = 1) {

$email = str_replace(array('@', '.'), array('@', '.'), $email);

return $tolink ? '<a href="mailto: '.$email.'">'.$email.'</a>': $email;
}
7、//對文件名進(jìn)行截?cái)嗵幚?,輸入文件名,返回處理后的文件?br />function fileext($filename) {

return trim(substr(strrchr($filename, '.'), 1, 10));
}
8、  DZ處理瀏覽器直接輸入路徑訪問問題是用的判斷常量法。但是機(jī)器人呢?機(jī)器人可沒常量。但是php有和自定義常量:$_SERVER['HTTP_USER_AGENT']。這兩個是用來判斷機(jī)器人的名稱的。里面還包含了名字。于是機(jī)器人的判斷法如下:
  //通過分析調(diào)用這個函數(shù)的common.inc.php文件。這個函數(shù)是用來判斷對機(jī)器人的處理方式的。
  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這個常量為假。反之則判斷蜘蛛是不是上述已經(jīng)定義好的搜索引擎,如果是則定義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文件里調(diào)用是這樣處理的:
  //通過這個常量,不允許機(jī)器人隨意訪問這個頁面。
  define('IS_ROBOT', getrobot());
  if(defined('NOROBOT') && IS_ROBOT) {

     exit(header("HTTP/1.1 403 Forbidden"));
  }
看回來還是常量法。只是這個常量的值是通過函數(shù)getrobot()獲取的。

更新錯誤:這些錯誤是我分析在其調(diào)用的地方得知的錯誤。但不可能我發(fā)現(xiàn)一點(diǎn)改一點(diǎn),所以在這里說明

以下為引用的內(nèi)容:
checklowerlimit():這個函數(shù)是用來檢查積分限制的

謝謝下面這些人的幫助

以下為引用的內(nèi)容:
dongxin1390008說:daddslashes函數(shù)是檢查php.ini文件的'MAGIC_QUOTES_GPC選項(xiàng)是否打開,若這個關(guān)閉,很容易的可以進(jìn)行sql注射,若關(guān)閉了,則使用addslashes對單引號,# 號進(jìn)行轉(zhuǎn)義 2008-10-6 17:33:30更新附件包將此注釋加入
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 激情毛片 | 麻豆专区一区二区三区四区五区 | 成人天堂资源www在线 | 亚洲大片| 欧美午夜影院 | 日韩三区| 国产精品久久久久久久久久东京 | 超碰总站 | 可以在线观看的av网站 | 国产经典一区二区三区 | 日韩国产精品视频 | 综合一区av | 在线视频成人 | 欧美猛交 | 日韩亚洲一区二区 | 国产乱码精品一区二区三区五月婷 | 亚洲第一页中文字幕 | 久久免费国产视频 | 99视频免费 | 99精品国产免费久久 | 亚洲精品乱码久久久久久写真 | 国产精品久久久久久久久久东京 | 国产一区二区三区四区 | 中文字幕av网站 | 美女在线观看www | 自拍 亚洲| 欧美不卡在线 | 欧美日本国产在线 | 国产精品无码专区在线观看 | 精品久久久久久久久久中文字幕 | 久久久久久亚洲蜜桃 | 成人精品国产 | 久久成年人视频 | 国产精品久久久久婷婷二区次 | 99热这里只有精品2 国产福利在线导航 | 久久久久国产视频 | 欧美日韩高清在线一区 | 精品欧美一区二区三区 | 国产玖玖 | 欧美一区二区 | 波多野结衣av电影在线观看 |