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

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

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

    common.inc.php文件23-73行代碼分析

    <?php
    /*生成錯誤日志呢?這里phpcms 作者是動態生成一個XML文件來做錯誤日志的。不錯不錯. 他使用了 in_array() 函數來實現(因為比較簡單,自己理解下)in_array()函數是檢查數組中是否存在某個值,只記錄 E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE 這三個級別的錯誤日志信息。\n 是文本換行符  \t是制表符. 這里他使用了一個比較漂亮而不常用的函數 wddx_serialize_value () wddx 其實也是一種 xml 。 wddx_serialize_value() 這個函數就是把一般變量以XML格式輸出。這樣我們就不用自己模擬寫xml了。方便吧。呵呵 第一個參數就是: 要格式輸出的變量,第二個參數是輸出的xml的介紹信息. 下面就是 error_log() 函數。這個函數十分有用了。就是生成錯誤日志XML文件。不需要我們fopen 了。方便吧。它還有很多功能。詳細的看手冊。chmod 設置日志文件的權限是 可讀可寫可執行。  在php5中。我習慣使用 extends Exception 來定義自己的出錯信息。所以很少用 set_error_handle(). 如果沒開啟日志功能。那么 error_reporting(E_ERROR | E_WARNING | E_PARSE) 就運行了。他的作用是:配置錯誤信息回報的等級。這是我從手冊中找出來的,參考一下。
    E_WARNING 通常都會顯示出來,但不會中斷程序的執行。這對除錯很有效。例如:用有問題的正則表達式呼叫 ereg()。
    E_ERROR 通常會顯示出來,亦會中斷程序執行。意即用這個遮罩無法追查到內存配置或其它的錯誤。
    E_PARSE 從語法中解析錯誤。
    E_CORE_ERROR 類似 E_ERROR,但不包括 PHP 核心造成的錯誤。
    E_CORE_WARNING 類似 E_WARNING,但不包括 PHP 核心錯誤警告。
    他的作用是把一般出錯信息輸出過來。 */
    if($CONFIG['sessionsavepath']) session_save_path($CONFIG['sessionsavepath']);
    /**
    定義session 的存儲路徑,session 其實 也是cookie 不過 session 是實現在服務器端的。安全但負載重點。這樣做的好處?效率很好。如果你在虛擬主機的話。大家的session cookie 都放在了php.ini里面設置的默認地方。文件夾臃腫就會慢羅。是吧。第二就是安全羅。 記得一定要定義在 session_start()函數之前
    */
    session_start();
    if(function_exists('date_default_timezone_set')) date_default_timezone_set($CONFIG['timezone']);
    /**
    php5開始有時區的概念了。記得就行
    */
    header('Content-type: text/html; charset='.$CONFIG['charset']);
    /**
     * 標頭 (header) 是服務器以 HTTP 協議傳 HTML 資料到瀏覽器前所送出的字符串,在標頭與 HTML 文件之間尚需空一行分隔。
    設置頁面編碼.  php編碼有: 頁面編碼。數據庫編碼。文件內碼。如果三碼相同就一般不會出現亂碼. 文件內碼是什么呢?每個文件都有自己的內部編碼。一般都用UTF8比較爽。怎么改變文件內碼?你用DW也行  UE 也行。隨便。 數據庫編碼那肯定是要指定的了。mysql5開始也有字符集模式這個最好也設置這樣可以兼容更多平臺。

    頁面編碼:<meta http-equiv="Content-Type" c />  這句就是。一般的HTML頭文件都有。那 還需要header('Content-type: text/html; charset='.$CONFIG['charset']);嗎?  其實需要的。因為有些自己寫的提示層呀。或是文件里沒指定頁面編碼的。就很容易出現亂碼那么我們就防范于未然。 header 一個編碼過去。那就OK了。多好。
    */
    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown'))
    {
    $PHP_IP = getenv('HTTP_CLIENT_IP');
    }
    elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown'))
    {
    $PHP_IP = getenv('HTTP_X_FORWARDED_FOR');
    }
    elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown'))
    {
    $PHP_IP = getenv('REMOTE_ADDR');
    }
    elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown'))
    {
    $PHP_IP = $_SERVER['REMOTE_ADDR'];
    }
    preg_match("/[\d\.]{7,15}/", $PHP_IP, $ipmatches); //進行正則表達式匹配
    $PHP_IP = $ipmatches[0] ? $ipmatches[0] : 'unknown';
    /**
    函數 getenv() 是獲取環境變量。環境變量:HTTP_CLIENT_IP 是獲取客戶端的IP 。但有可能人家是通過代理來訪問你的程序的呢。那么這時候就要用 環境變量:
    HTTP_X_FORWARDED_FOR 了。包括getenv('REMOTE_ADDR') $_SERVER['REMOTE_ADDR']   都是獲取人家IP的。反正碰羅。碰到那個能獲取就大工告成。
    */
    $PHP_TIME = time();
    $PHP_SELF = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : (isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : $_SERVER['ORIG_PATH_INFO']);
    /**
    獲取當前運行的腳本名:  剛開始看是不是有點亂呢。 咋沒用if else 呢。 看這樣的東西。我們最好從右看到左。這樣比較好明白點。$_SERVER['SCRIPT_NAME'] $_SERVER['PHP_SELF'] $_SERVER['ORIG_PATH_INFO'] 這三個服務器全局變量都是獲取 當前腳本名的。主要看服務器當前環境了。那個存在的就獲取那個。
    isset() 函數 十分有用。 測試一個變量是否已經定義。 注: $a= NULL ; isset($a) 這樣會返回false的哦。 注意 isset 和empty 兩個函數的用法。用得不好會出大問題的。自己看手冊。  
    */
    $PHP_QUERYSTRING = $_SERVER['QUERY_STRING'];
    $PHP_DOMAIN = $_SERVER['SERVER_NAME']; //獲取服務器的名字。
    $PHP_REFERER = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; //獲取訪問的url包括文件名。
    $PHP_SCHEME = $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://'; //測試服務器是否啟動了ssl 連接如果是的話。就用https://安全連接來進行通信
    $PHP_PORT = $_SERVER['SERVER_PORT'] == '80' ? '' : ':'.$_SERVER['SERVER_PORT'];
    $PHP_SITEURL = $PHP_SCHEME.$PHP_DOMAIN.$PHP_PORT.PHPCMS_PATH;
    $PHP_URL = $PHP_SCHEME.$PHP_DOMAIN.$PHP_PORT.$PHP_SELF.($PHP_QUERYSTRING ? '?'.$PHP_QUERYSTRING : '');
    /**
    獲取當前腳本的URL
    */
    $db_file = $db_class = 'db_'.$CONFIG['database'];
    if(!defined('IN_ADMIN')) //如果不是在后臺。 常量 IN_ADMIN 是后臺標志
    {
    if($CONFIG['dbiscache']) $db_file .= '_cache';
    if($CONFIG['phpcache'] == '2') // 如果在config.inc.php 里面開啟了緩存
    {
    $cachefileid = md5($PHP_SELF.'?'.$PHP_QUERYSTRING); //把腳本名和后面的get信息 md5加密,以此來生成下面的緩存目錄和緩存文件
    $cachefiledir = PHPCMS_ROOT.'/data/phpcache/'.substr($cachefileid, 0, 2).'/'; //緩存目錄
    $cachefile = $cachefiledir.$cachefileid.'.html'; //緩存文件: xxx.html 格式 
    if(file_exists($cachefile) && ($PHP_TIME < @filemtime($cachefile) + $CONFIG['phpcacheexpires']))
     
    //filemtime("file")這個函數是求得文件最后修改的時間的,$CONFIG['phpcacheexpires'])是系統設置的緩存在機器上存貯的時間,所以這兩個時間加起來就是緩存文件實際的生存時間了。
     
    ?>

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

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

    導航

    留言簿(6)

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 免费日本一区二区| 亚洲A∨精品一区二区三区| 国外亚洲成AV人片在线观看| 亚洲AV无码AV日韩AV网站| h片在线播放免费高清 | 亚洲精品国产suv一区88| 色妞WWW精品免费视频 | 国产亚洲欧洲精品| 国产色爽免费无码视频| 久久亚洲一区二区| 亚洲1区2区3区精华液| 国产精品冒白浆免费视频| 成人精品国产亚洲欧洲| 亚洲人成无码网WWW| 中文字幕无线码中文字幕免费| 亚洲宅男天堂在线观看无病毒| 亚洲午夜精品一区二区麻豆| 成人毛片18女人毛片免费视频未| 午夜亚洲国产理论片二级港台二级 | 亚洲欧洲精品视频在线观看| 美女被免费喷白浆视频| 亚洲欧洲日产国码久在线| 免费人成年激情视频在线观看| 国产区在线免费观看| 亚洲一区综合在线播放| 亚洲免费福利在线视频| 国产综合激情在线亚洲第一页 | 97人伦色伦成人免费视频| 亚洲av永久中文无码精品| 亚洲午夜激情视频| 最近免费中文字幕大全高清大全1| 久久久久亚洲av成人无码电影| 亚洲国产成人无码AV在线影院 | 亚洲激情在线视频| 成年人视频在线观看免费| 色爽黄1000部免费软件下载| 亚洲av无码专区国产乱码在线观看| 亚洲免费网站在线观看| 久久久久久亚洲Av无码精品专口 | 黄网站免费在线观看| 亚洲中文字幕无码久久2020 |