mirror of
https://github.com/e107inc/e107.git
synced 2025-01-17 12:48:24 +01:00
294 lines
9.1 KiB
PHP
294 lines
9.1 KiB
PHP
<?php
|
|
/*
|
|
+ ----------------------------------------------------------------------------+
|
|
| e107 website system
|
|
|
|
|
| Copyright (C) 2008-2009 e107 Inc (e107.org)
|
|
| http://e107.org
|
|
|
|
|
|
|
|
| Released under the terms and conditions of the
|
|
| GNU General Public License (http://gnu.org).
|
|
|
|
|
| $Source: /cvs_backup/e107_0.8/e107_handlers/debug_handler.php,v $
|
|
| $Revision$
|
|
| $Date$
|
|
| $Author$
|
|
+----------------------------------------------------------------------------+
|
|
*/
|
|
|
|
//
|
|
// IMPORTANT Info for devs who want to add to and/or use debug definitions!
|
|
//
|
|
// MAKING NEW DEBUG DEFS
|
|
// The debug levels are Single Bit Binary Values. i.e, 1,2,4,8,16...
|
|
// In the table below, if you want to define a new value:
|
|
// - If it is debug info ALL devs will often want, then pick one of
|
|
// the remaining "FILLIN" items and give it the name and definition you need
|
|
// - If it is a detail item not often used, simply add yours to the end of the
|
|
// list, multiplying the previous value by 2 to get the the next 'bit' number
|
|
// - In either case, create one or more shortcut/abbreviations in $aDebugShortcuts
|
|
// to make it easy for dev's to specify the new display item.
|
|
//
|
|
|
|
|
|
if (!defined('e107_INIT')) { exit; }
|
|
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class e107_debug {
|
|
|
|
private static $debug_level = 0;
|
|
|
|
/* DEBUG shortcuts */
|
|
private static $aDebugShortcuts = array(
|
|
'all' => 255, // all basics
|
|
'basic' => 255, // all basics
|
|
'b' => 255, // all basics
|
|
'warn' => 1, // just php warnings, parse errrors, debug log, etc
|
|
'showsql' => 2, // sql basics
|
|
'counts' => 4, // traffic counters
|
|
|
|
'detail' => 16740351, // (0+0xfffff-32768-4096) all details, except notice and inline sc
|
|
'd' => 16740351, // all details, except notice and inline sc
|
|
'time' => 256, // time details and php errors
|
|
'sql' => 512, // sql details and php errors
|
|
'paths' => 1024, // dump path strings
|
|
'bbsc' => 2048, // show bb and sc details
|
|
'sc' => 4096, // Shortcode paths dumped inline
|
|
'backtrace' => 8192, // show backtrace when PHP has errors
|
|
'deprecated' => 16384, // show if code is using deprecated functions
|
|
'notice' => 32768, // detailed notice error messages?
|
|
'inc' => 65536, // include files
|
|
'everything'=> 16773119, //(0+0xffffff-4096) 24 bits set, except shortcode paths
|
|
// removed: inline debug breaks pages!
|
|
);
|
|
|
|
function __construct()
|
|
{
|
|
|
|
}
|
|
|
|
/**
|
|
* @return string[]
|
|
*/
|
|
public static function getAliases()
|
|
{
|
|
return array(
|
|
'off' => 'Off',
|
|
'basic' => 'Basic',
|
|
'counts' => 'Traffic Counters',
|
|
'showsql' => 'SQL Analysis',
|
|
'time' => 'Time Analysis',
|
|
'notice' => 'Notices (PHP)',
|
|
'warn' => 'Warnings (PHP)',
|
|
'backtrace' => 'Backtraces (PHP)',
|
|
'deprecated' => 'Deprecated Functions (PHP)',
|
|
'inc' => 'Included Files (PHP)',
|
|
'paths' => 'Paths + Variables', // dump path strings
|
|
'bbsc' => 'BBCodes + Shortcodes', // show bb and sc details
|
|
'sc' => 'Shortcode Placement', // Shortcode paths dumped inline
|
|
'sql' => 'SQL Analysis (Detailed)', // sql details and php errors
|
|
'everything' => 'All Details',
|
|
);
|
|
|
|
}
|
|
|
|
/**
|
|
* Returns the currently active debug mode as an alias. eg. 'basic'
|
|
* @return string|null
|
|
*/
|
|
public static function getShortcut()
|
|
{
|
|
if(deftrue('e_MENU'))
|
|
{
|
|
list($tmp,$alias) = explode('=', e_MENU);
|
|
return str_replace(['!','+','-', '0', '1'],'',$alias);
|
|
}
|
|
|
|
if(empty($_COOKIE['e107_debug_level']))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
$a = self::$aDebugShortcuts;
|
|
unset($a['all'], $a['b'], $a['d']); // remove duplicates.
|
|
|
|
$keys = array_flip($a);
|
|
|
|
list($tmp,$level) = explode('=',$_COOKIE['e107_debug_level']);
|
|
|
|
$level = (int) $level;
|
|
|
|
return isset($keys[$level]) ? $keys[$level] : null;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public static function activated()
|
|
{
|
|
if (isset($_COOKIE['e107_debug_level']) || deftrue('e_DEBUG') || (strpos(e_MENU, "debug") === 0)) // ADMIN and getperms('0') are not available at this point.
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public static function init()
|
|
{
|
|
if(!self::activated())
|
|
{
|
|
self::setConstants();
|
|
return false;
|
|
}
|
|
|
|
if (preg_match('/debug(=?)(.*?),?(!|\+|stick|-|unstick|$)/', e_MENU, $debug_param) || isset($_COOKIE['e107_debug_level']))
|
|
{
|
|
$dVals = '';
|
|
if (!isset($debug_param[1]) || ($debug_param[1] == '')) $debug_param[1] = '=';
|
|
if (isset($_COOKIE['e107_debug_level']))
|
|
{
|
|
$dVals = substr($_COOKIE['e107_debug_level'], 6);
|
|
}
|
|
|
|
if (preg_match('/debug(=?)(.*?),?(!|\+|stick|-|unstick|$)/', e_MENU))
|
|
{
|
|
$dVals = $debug_param[1] == '=' ? $debug_param[2] : 'everything';
|
|
}
|
|
|
|
$aDVal = explode('.', $dVals); // support multiple values, OR'd together
|
|
$dVal = 0;
|
|
|
|
|
|
foreach ($aDVal as $curDVal)
|
|
{
|
|
if (isset(self::$aDebugShortcuts[$curDVal]))
|
|
{
|
|
$dVal |= self::$aDebugShortcuts[$curDVal];
|
|
}
|
|
else
|
|
{
|
|
$dVal |= intval($curDVal);
|
|
}
|
|
}
|
|
|
|
if (isset($debug_param[3]))
|
|
{
|
|
if ($debug_param[3] == '!' || $debug_param[3] == '+' || $debug_param[3] == 'stick')
|
|
{
|
|
cookie('e107_debug_level', 'level=' . $dVal, time() + 86400);
|
|
}
|
|
|
|
if ($debug_param[3] == '-' || $debug_param[3] == 'unstick')
|
|
{
|
|
cookie('e107_debug_level', '', time() - 3600);
|
|
}
|
|
}
|
|
|
|
self::$debug_level = $dVal;
|
|
}
|
|
|
|
self::setConstants();
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* Define all debug constants -- each one will be zero or a value
|
|
* USING DEBUG DEFINITIONS
|
|
* Since these are Bit Values, **never** test using < or > comparisons. Always
|
|
* test using boolean operations, such as
|
|
* @example if (E107_DBG_PATH)
|
|
* @example if (E107_DBG_SQLQUERIES | E107_DBG_SQLDETAILS)
|
|
* Since constants are defined for all possible bits, you should never need to use a number value like
|
|
* @example if (E107_DEBUG_LEVEL & 256)
|
|
* And there's never a reason to use
|
|
* if (E107_DEBUG_LEVEL > 254)
|
|
*/
|
|
private static function setConstants()
|
|
{
|
|
|
|
if(!defined('E107_DEBUG_LEVEL'))
|
|
{
|
|
define('E107_DEBUG_LEVEL', self::getLevel());
|
|
}
|
|
|
|
// Basic levels
|
|
define('E107_DBG_BASIC', (E107_DEBUG_LEVEL & 1)); // basics: worst php errors, sql errors, log, etc
|
|
define('E107_DBG_SQLQUERIES', (E107_DEBUG_LEVEL & 2)); // display all sql queries
|
|
define('E107_DBG_TRAFFIC', (E107_DEBUG_LEVEL & 4)); // display traffic counters
|
|
define('E107_DBG_FILLIN8', (E107_DEBUG_LEVEL & 8)); // fill in what it is
|
|
define('E107_DBG_FILLIN16', (E107_DEBUG_LEVEL & 16)); // fill in what it is
|
|
define('E107_DBG_FILLIN32', (E107_DEBUG_LEVEL & 32)); // fill in what it is
|
|
define('E107_DBG_FILLIN64', (E107_DEBUG_LEVEL & 64)); // fill in what it is
|
|
define('E107_DBG_FILLIN128', (E107_DEBUG_LEVEL & 128)); // fill in what it is
|
|
|
|
// Gory detail levels
|
|
define('E107_DBG_TIMEDETAILS',(E107_DEBUG_LEVEL & 256)); // detailed time profile
|
|
define('E107_DBG_SQLDETAILS', (E107_DEBUG_LEVEL & 512)); // detailed sql analysis
|
|
define('E107_DBG_PATH', (E107_DEBUG_LEVEL & 1024)); // show e107 predefined paths
|
|
define('E107_DBG_BBSC', (E107_DEBUG_LEVEL & 2048)); // Show BBCode/ Shortcode usage in postings
|
|
define('E107_DBG_SC', (E107_DEBUG_LEVEL & 4096)); // Dump (inline) SC filenames as used
|
|
define('E107_DBG_ERRBACKTRACE', (E107_DEBUG_LEVEL & 8192)); // show backtrace for php errors
|
|
define('E107_DBG_DEPRECATED', (E107_DEBUG_LEVEL & 16384)); // Show use of deprecated functions
|
|
define('E107_DBG_ALLERRORS', (E107_DEBUG_LEVEL & 32768)); // show ALL php errors (including notices), not just fatal issues
|
|
define('E107_DBG_INCLUDES', (E107_DEBUG_LEVEL & 65536)); // show included file list
|
|
define('E107_DBG_NOTICES', (E107_DEBUG_LEVEL & 32768)); // show included file list
|
|
|
|
if(!defined('e_DEBUG'))
|
|
{
|
|
$e_DEBUG = (E107_DEBUG_LEVEL > 0);
|
|
define('e_DEBUG', $e_DEBUG);
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* @return int
|
|
*/
|
|
public static function getLevel()
|
|
{
|
|
return self::$debug_level;
|
|
}
|
|
|
|
/**
|
|
* @param $level
|
|
* @return void
|
|
*/
|
|
public static function setLevel($level = 0)
|
|
{
|
|
self::$debug_level = $level;
|
|
}
|
|
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
function set_error_reporting()
|
|
{
|
|
}
|
|
}
|
|
|
|
// Quick debug message logger
|
|
// Example: e7debug(__FILE__.__LINE__.": myVar is ".print_r($myVar,TRUE));
|
|
/*
|
|
function e7debug($message,$TraceLev=1)
|
|
{
|
|
if (!E107_DEBUG_LEVEL) return;
|
|
global $db_debug;
|
|
if (is_object($db_debug))
|
|
{
|
|
$db_debug->log($message,$TraceLev);
|
|
}
|
|
}
|
|
*/
|