<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    common.inc.php文件21-32行代碼分析

    <?php
    /*步。
    哈哈。我們要懂模仿。 */
     
    @extract($_POST, EXTR_OVERWRITE);
    @extract($_GET, EXTR_OVERWRITE);
    /**
    嘿。 extract 前面加個 @雞蛋做什么呢??抑制錯誤的。還不懂的話。自己百度了。
    為什么用extract()函數呢. 他就是把$_GET、$_POST中的內容變成變量的形式,平時我們程序 是不是要常使用 $_POST $_GET來獲取傳遞的變量呀。是不是感覺賊麻煩呀。
    比如 $_POST['xx'] 這樣接受是挺好。但寫多了很麻煩是吧。我是感覺麻煩。我現在想直接就 $xx就可以獲取傳遞過來的東西。那怎么辦呢。
    就用了 extract()函數來實現這么一個技巧。參數:EXTR_OVERWRITE的意思是如果有沖突,覆蓋已有的變量。 這個技巧在discuz 論壇上也有應用。
    */
    unset($_POST, $_GET);
    /**
    unset() 好處不用說了吧。 釋放 $_POST $_GET 數組 ,因為已經不需要他們了。 
    明天放假了.今天在寫點羅.放假沒空寫了.要陪老婆,大家看了有什么不明白的.可以跟帖問.我懂的我會回答.謝謝
    繼續::
     
    2007-12-21
     
    吃完中午開始分析了點代碼.時間不多.復制PHP內容到剪貼板PHP代碼: */
     
    require PHPCMS_ROOT.'/config.inc.php';
    /**
    加裁整站的配置參數文件。一般的程序都會有這個文件。做什么的呢?比如一些數據庫連接地址。用戶名,密碼等。需要用到的參數都定義在這個文件里面。這樣以后配置變了。我們只要改動下這個文件里面的
    變量值就好。是不是很方便呢。呵呵. 在這里說下 require() 這個加載函數。 require 和 include 都是用來加載其他PHP文件用的。但他們是有區別的。 require 函數:是"預解釋"函數。就是程序一加載,就執行了require函數。而include 呢。是個過程加載函數。我們可以在邏輯里比如: if 里面使用include 來動態的加載其他程序片段。而require 就不行。
    */
    require PHPCMS_ROOT.'/languages/'.$CONFIG['language'].'/phpcms.lang.php';
    /**
    顧名思義: 這個就是加載語言包了。PHP的國際化目前做得最多的。就是直接用PHP文件來實現。 在 phpcms.lang.php 文件里面定義程序中要用到的中文信息。然后在程序一開始就加載。那里程序里面
    就可以使用這個文件里面的變量和一切。那么就簡單了。模板上就不需要直接寫中文信息了。直接用這個文件里面定義的變量等來替換。從而實現國際化。over!!!最好自己打開這個語言文件再加上自己思考下。就知道。原來如此簡單。
    */
    define('PHPCMS_PATH', $CONFIG['rootpath']);
    define('PHPCMS_CACHEDIR', $CONFIG['cachedir']);
    /**
    $CONFIG['rootpath'] 這個就是全局配置文件 config.inc.php 文件里面數據庫信息。等全部配置信息。在這里把他們定義為 常量。 為什么需要定義為常量呢。因為作者感覺這樣寫爽羅。呵呵。其實因為后面
    用到這兩個變量多。所以干脆定義為常量。方便使用。再多說一個技巧: $CONFIG['rootpath'] 其實也可以寫成 $CONFIG[rootpath] 但是最好不要這樣。為什么呢。因為PHP引擎會先判斷 rootpath 是不是常量。如果不是才會認定    $CONFIG[rootpath] 是數組。 這樣性能上就差了一點點了。 再多說一個技巧: 為什么程序多數都用 '' 單引號呢而不用 "" 雙引號呢。因為這樣效率好, "" 雙引號。
    php引擎還會先檢查里面是否有變量,如果有就解釋。而 '' 單引號不會做這一步的檢查。而直接就當成字符竄了。所以效率上也會有一點點影響哦。
    */
    $CONFIG['enablephplog'] ? set_error_handler('phpcms_error') : error_reporting(E_ERROR | E_WARNING | E_PARSE);
    /*$CONFIG['enablephplog'] 是否開啟錯誤日志設置。這個設置在全局配置文件里面.config.inc.php 。 這里使用了 三目運算符   偶最喜歡用了。一些簡短的邏輯判斷。可以使用 ? : ; 來實現比較簡潔
    set_error_handler() 這個函數就大有來頭了。php4里面的典型自定義程序出錯后行為的一個函數。十分好用。怎么用呢? set_error_handler(函數) 的參數也是一個函數。這個函數。反映了程序出錯后行為的。
    phpcms_error 函數存在,set_error_handler就是用用戶自定義的錯誤處理函數來處理程序中的錯誤,phpcms_error 在global.func.php 全局函數里面。
    */
     
    function phpcms_error($errno, $errmsg, $filename, $linenum, $vars)
    {
    $filename = str_replace(PHPCMS_ROOT, '.', $filename);
    $filename = str_replace("\\", '/', $filename); //  把win平臺的 \\ 換成  /兼容常見系統的路徑
    if(!defined('E_STRICT')) define('E_STRICT', 2048);
    $dt = date('Y-m-d H:i:s');
    $errortype = array (  
    E_ERROR => 'Error',
    E_WARNING => 'Warning',
    E_PARSE => 'Parsing Error',
    E_NOTICE => 'Notice',
    E_CORE_ERROR => 'Core Error',
    E_CORE_WARNING => 'Core Warning',
    E_COMPILE_ERROR => 'Compile Error',
    E_COMPILE_WARNING => 'Compile Warning',
    E_USER_ERROR => 'User Error',
    E_USER_WARNING => 'User Warning',
    E_USER_NOTICE => 'User Notice',
    E_STRICT => 'Runtime Notice'
    );
    $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
    $err = "<errorentry>\n";
    $err .= "\t<datetime>" . $dt . "</datetime>\n";
    $err .= "\t<errornum>" . $errno . "</errornum>\n";
    $err .= "\t<errortype>" . $errortype[$errno] . "</errortype>\n";
    $err .= "\t<errormsg>" . $errmsg . "</errormsg>\n";
    $err .= "\t<scriptname>" . $filename . "</scriptname>\n";
    $err .= "\t<scriptlinenum>" . $linenum . "</scriptlinenum>\n";
    if (in_array($errno, $user_errors))
    {
    $err .= "\t<vartrace>" . wddx_serialize_value($vars, "Variables") . "</vartrace>\n";
    }
    $err .= "</errorentry>\n\n";
    echo $err;
    error_log($err, 3, PHPCMS_ROOT.'/data/php_error_log.xml');
    chmod(PHPCMS_ROOT.'/data/php_error_log.xml', 0777);
    }
    /*就是這個鳥蛋。 現在我們慢慢來干掉他。呵呵  這個自定義出錯信息函數默認帶有四個參數。 第一個參數 $errno 是程序出錯的等級。 第二參數是程序出錯的界面信息。第三是出現錯誤的程序文件名。
    第四是 第幾行出現錯誤。第五個參數。要不要都行是當前變量狀態的快照.看吧。我們有這些信息后。想定義怎么樣的錯誤信息給客戶看都很容易了是吧?但現在我們是要上一
    */
    ?>

    posted on 2008-12-10 00:42 丁克設計 閱讀(256) 評論(0)  編輯  收藏 所屬分類: PHPCMS整站代碼講解

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    留言簿(6)

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 亚洲国产成a人v在线| 久久亚洲中文字幕精品一区| 久久久久亚洲av无码专区导航| 免费国产99久久久香蕉| 亚洲啪啪综合AV一区| 三年片在线观看免费西瓜视频| 色久悠悠婷婷综合在线亚洲| 精品无码一级毛片免费视频观看| 亚洲乳大丰满中文字幕| 久久精品国产免费| 亚洲AV日韩AV天堂一区二区三区 | 久久精品国产亚洲Aⅴ香蕉| 日韩精品无码永久免费网站| 爱情岛论坛网亚洲品质自拍| 香蕉免费看一区二区三区| 九月丁香婷婷亚洲综合色| 性色午夜视频免费男人的天堂| 中文字幕在线观看亚洲| 精品久久久久成人码免费动漫| 亚洲中文字幕无码亚洲成A人片| 国产公开免费人成视频| 一级毛片免费视频网站| 亚洲精品免费视频| 在线看片韩国免费人成视频| 日韩亚洲翔田千里在线| 亚洲精品美女久久久久99| 91av视频免费在线观看| 亚洲综合小说另类图片动图| 免费永久在线观看黄网站| 怡红院免费的全部视频| 亚洲国产人成在线观看| 四虎影视永久免费视频观看| 三年在线观看免费观看完整版中文| 亚洲成年人电影网站| 成人毛片18女人毛片免费| 国产精品99爱免费视频| 亚洲欧洲另类春色校园小说| 无码欧精品亚洲日韩一区夜夜嗨| 久久精品免费观看| 亚洲1区2区3区精华液| 亚洲va国产va天堂va久久|