ecshop調試模式參數DEBUG_MODE的說明和實現原理

找到ecshop源碼根目錄下的data/config.php文件,在文件尾部加入:

define('DEBUG_MODE', 0);

其中參數如下,如果要配置多個參數,則寫相加的值

0 //禁用調試調試

1 //顯示所有錯誤

2 //禁用Smarty緩存

4 //使用includes/lib.debug.php

8 //記錄查詢的SQL到data目錄下以mysql_query_開頭的文件


方便開發調式,顯示所有的錯誤信息和禁用SMARTY緩存。

define('DEBUG_MODE', 3); // 3=1+2


各參數原理說明


1)禁用調試模式,不顯示錯誤信息

if (defined('DEBUG_MODE') == false)
{
    define('DEBUG_MODE', 0);
}

默認設置爲關閉錯誤和不記錄錯誤日誌,啓用smarty緩存,生產環境使用。


2)顯示所有錯誤信息

在includes/init.php文件最後找到:

if ((DEBUG_MODE & 1) == 1)
{
    error_reporting(E_ALL);
}
else
{
    error_reporting(E_ALL ^ (E_NOTICE | E_WARNING)); 
}

如果位運算成立,則開啓全部錯誤信息,不成立則天啓除E_NOTICE、E_WARNING級別外的全部錯誤信息


3)禁用Smarty緩存

在前臺功能php文件中,如index.php、goods.php、category.php等,都有:

if ((DEBUG_MODE & 2) != 2) {
    $smarty->caching = true;
}

如果位運算條件成立,則開啓smarty的緩存。


4)使用includes/lib.debug.php來調試

if ((DEBUG_MODE & 4) == 4)
{
    include(ROOT_PATH . 'includes/lib.debug.php');
}

如果位運算條件成立,則引入文件lib_debug.php來調試錯誤信息。


5)記錄查詢的SQL到指定文件中

在includes/cls_mysql.php文件query方法中

if (defined('DEBUG_MODE') && (DEBUG_MODE & 8) == 8)
{
    $logfilename = $this->root_path . DATA_DIR . 
                   '/mysql_query_' . $this->dbhash . '_' . date('Y_m_d') . '.log';
    $str = $sql . "\n\n";

    if (PHP_VERSION >= '5.0')
    {
        file_put_contents($logfilename, $str, FILE_APPEND);
    }
    else
    {
        $fp = @fopen($logfilename, 'ab+');
        if ($fp)
        {
            fwrite($fp, $str);
            fclose($fp);
        }
    }
}

條件成立,SQL查詢語句將會追加寫入到data/目錄下,日誌文件名由$logfilename定義。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章