phpDocumentor PHP_Debug
[ class tree: PHP_Debug ] [ index: PHP_Debug ] [ all elements ]

Source for file Debug.php

Documentation is available at Debug.php

  1. <?php
  2.  
  3. /**
  4.  * External constants
  5.  * 
  6.  * @filesource
  7.  * @package PHP_Debug
  8.  */
  9. if (!defined('STR_N')) 
  10.     define('STR_N'"");
  11.  
  12. if (!defined('CR')) 
  13.     define('CR'"\r\n");
  14.  
  15.  
  16. /**
  17.  * Factory class for renderer of Debug class
  18.  * 
  19.  * @see Debug/Renderer/*.php
  20.  */
  21. require_once 'Debug/Renderer.php';
  22.  
  23.  
  24. /**
  25.  * Possible version of class Debug
  26.  */ 
  27. define('PHP_DEBUG_VERSION_STANDALONE'0);
  28. define('PHP_DEBUG_VERSION_PEAR',       1);
  29. define('PHP_DEBUG_VERSION_DEFAULT',    PHP_DEBUG_VERSION_STANDALONE);
  30. define('PHP_DEBUG_VERSION',            PHP_DEBUG_VERSION_STANDALONE);
  31. define('PHP_DEBUG_RELEASE',            'V2.0.0');
  32.  
  33.  
  34.  
  35. /**
  36.  * These are constant for dump() and DumpObj() functions.
  37.  * 
  38.  * - PHP_DEBUG_DUMP_DISP : Tell the function to display the debug info.
  39.  * - PHP_DEBUG_DUMP_STR  : Tell the fonction to return the debug info as a
  40.  * string
  41.  * - PHP_DEBUG_DUMP_VARNAME : Default name of Array - DBG_ARR_OBJNAME : Default
  42.  * name of Object
  43.  */
  44. define('PHP_DEBUG_DUMP_DISP',    1);
  45. define('PHP_DEBUG_DUMP_STR',     2);
  46. define('PHP_DEBUG_DUMP_VARNAME''Variable');
  47.  
  48. /**
  49.  * These are constants to define Super array environment variables
  50.  */ 
  51. define('PHP_DEBUG_GLOBAL_GET',     0);
  52. define('PHP_DEBUG_GLOBAL_POST',    1);
  53. define('PHP_DEBUG_GLOBAL_FILES',   2);
  54. define('PHP_DEBUG_GLOBAL_COOKIE',  3);
  55. define('PHP_DEBUG_GLOBAL_REQUEST'4);
  56. define('PHP_DEBUG_GLOBAL_SESSION'5);
  57. define('PHP_DEBUG_GLOBAL_GLOBALS'6);
  58.  
  59. /**
  60.  * These are constant for addDebug functions, they set the behaviour where
  61.  * the function should add the debug information in first or in last position
  62.  */
  63. define('PHP_DEBUG_POSITIONLAST',  0);
  64. define('PHP_DEBUG_POSITIONFIRST'1);
  65.  
  66.  
  67. class Debug 
  68. {
  69.     /**
  70.      * Default configuration options
  71.      * 
  72.      * @since V2.0.0 - 16 apr 2006
  73.      * @see setOptions()
  74.      * @var array 
  75.      */
  76.     protected $defaultOptions = array(
  77.         'DEBUG_render_mode'          => 'HTML_Table',      // Render mode
  78.         
  79.         'DEBUG_restrict_access'      => true,              // Restrict or not the access
  80.         
  81.         'DEBUG_allowed_ip'           => array('127.0.0.1'),// Authorized IP to view the debug when restrcit_access is true
  82.         
  83.         'DEBUG_allow_url_access'     => false,             // Allow to access the debug with a special parameter in the url
  84.         
  85.         'DEBUG_url_key'              => 'debug',           // Key for url instant access
  86.         
  87.         'DEBUG_url_pass'             => 'true',            // Password for url instant access
  88.         
  89.         'DEBUG_enable_watch'         => false,             // Enable the watch function
  90.         
  91.         'DEBUG_replace_errorhandler' => true,              // Replace or no the PHP errorhandler
  92.         
  93.         'DEBUG_lang'                 => 'EN'               // Language
  94.     
  95.     );
  96.  
  97.     /**
  98.      * Default static options for static functions
  99.      *
  100.      * @since V2.0.0 - 16 apr 2006
  101.      * @see dump()
  102.      * @var array 
  103.      */
  104.     static $staticOptions array(
  105.         'DEBUG_dump_method'          => 'print_r',          // print_r or var_dump
  106.         
  107.         'DEBUG_pear_var_dump_method' => 'Var_Dump::display' // Var_Dump display funtion 
  108.     
  109.     );
  110.  
  111.     /**
  112.      * Functions from this class that must be excluded in order to have the
  113.      * correct backtrace information
  114.      *
  115.      * @see Debug_Line::setTraceback()
  116.      * @since V2.0.0 - 13 apr 2006
  117.      * @var array 
  118.      */
  119.     static $excludedBackTraceFunctions array(
  120.         'add'
  121.         'dump'
  122.         'error'
  123.         'query'
  124.         'addDebug'
  125.         'setAction'
  126.         'addDebugFirst',
  127.         'watchesCallback',
  128.         'errorHandlerCallback'
  129.     );
  130.  
  131.     /**
  132.      * Correspondance between super array constant and variable name
  133.      * Used by renderers
  134.      *
  135.      * @since V2.0.0 - 18 apr 2006
  136.      * @var array 
  137.      */
  138.     static $globalEnvConstantsCorresp array(  
  139.         PHP_DEBUG_GLOBAL_GET    => '_GET',
  140.         PHP_DEBUG_GLOBAL_POST   => '_POST',
  141.         PHP_DEBUG_GLOBAL_FILES  => '_FILES',
  142.         PHP_DEBUG_GLOBAL_COOKIE => '_COOKIE',
  143.         PHP_DEBUG_GLOBAL_REQUEST=> '_REQUEST',
  144.         PHP_DEBUG_GLOBAL_SESSION=> '_SESSION',
  145.         PHP_DEBUG_GLOBAL_GLOBALS=> 'GLOBALS'
  146.     );
  147.  
  148.     /**
  149.      * Default configuration options
  150.      *
  151.      * @since V2.0.0 - 13 apr 2006
  152.      * @see setOptions()
  153.      * @var array 
  154.      */
  155.     protected $options = array();
  156.  
  157.     /**
  158.      * This is the array where the debug lines are collected.
  159.      *
  160.      * @since V2.0.0 - 11 apr 2006
  161.      * @see Debug_Line
  162.      * @var array 
  163.      */
  164.     protected  $debugLineBuffer = array();
  165.     
  166.     /**
  167.      * This is the array containing all the required/included files of the
  168.      * script
  169.      *
  170.      * @since V2.0.0 - 17 apr 2006
  171.      * @see render(), PHP_DEBUGLINE_TEMPLATES
  172.      * @var array 
  173.      */    
  174.     protected $requiredFiles = array();
  175.  
  176.     /**
  177.      * This is the array containing all the watched variables
  178.      *
  179.      * @since V2.0.0 - 16 apr 2006
  180.      * @see watch()
  181.      * @var array 
  182.      */    
  183.     protected $watches = array();
  184.     
  185.     /** 
  186.      * Execution start time
  187.      * 
  188.      * @since V2.0.0 - 11 apr 2006
  189.      * @see __construct()
  190.      * @var float 
  191.      */
  192.     private $startTime;
  193.         
  194.     /** 
  195.      * Exection end time
  196.      * 
  197.      * @since V2.0.0 - 11 apr 2006
  198.      * @see render()
  199.      * @var float 
  200.      */
  201.     private $endTime;
  202.     
  203.     /** 
  204.      * Number of queries executed during script
  205.      * 
  206.      * @since V2.0.0 - 19 apr 2006
  207.      * @var integer 
  208.      */
  209.     private $queryCount;
  210.  
  211.     /**
  212.      * PHP_Debug class constructor
  213.      * 
  214.      * Here we set :
  215.      * - the execution start time
  216.      * - the options
  217.      * - the error and watch call back functions
  218.      * 
  219.      * @param array $options    Array containing options to affect to Debug
  220.      *                           object and his childs
  221.      * 
  222.      * @since V2.0.0 - 11 apr 2006
  223.      */
  224.     function __construct($options array())
  225.     {
  226.         $this->startTime = Debug::getMicroTimeNow();
  227.         $this->options = array_merge($this->defaultOptions$options);
  228.         $this->setWatchCallback();
  229.         $this->setErrorHandler();
  230.     }
  231.  
  232.     /**
  233.      * Add a debug information
  234.      *
  235.      * @param string  $info  The main debug information
  236.      *                       (may be empty for some debug line types)
  237.      * @param integer $type Type of the Debug_Line
  238.      * 
  239.      * @see Debug constants
  240.      * @since 07 Apr 2006
  241.      */     
  242.     public function addDebug($info$type PHP_DEBUGLINE_STD$position PHP_DEBUG_POSITIONLAST)
  243.     {        
  244.         // Add info
  245.         if ($position == PHP_DEBUG_POSITIONLAST{        
  246.             $this->debugLineBuffer[new Debug_Line($info$type);
  247.         else {
  248.             array_unshift($this->debugLineBuffernew Debug_Line($info$type));
  249.         }
  250.         
  251.         // Additional process for some types
  252.         switch ($type{
  253.             case PHP_DEBUGLINE_QUERY:
  254.                 $this->queryCount++;
  255.                 break;
  256.         
  257.             default:
  258.                 break;
  259.         }
  260.     }
  261.  
  262.     /**
  263.      * Add a debug info before all the existing other debug lines
  264.      * It is an alias for addDebug($info, PHP_DEBUG_POSITIONLAST)
  265.      * 
  266.      * @see addDebug
  267.      * @since 13 Apr 2006
  268.      */
  269.     public function addDebugFirst($info$type PHP_DEBUGLINE_STD)
  270.     {
  271.         $this->addDebug($info$typePHP_DEBUG_POSITIONFIRST);
  272.     }
  273.  
  274.     /**
  275.      * This is an alias for the addDebug function
  276.      *
  277.      * @see addDebug()
  278.      * @since  V2.0.0 - 20 apr 2006
  279.      */
  280.     public function add($info$type PHP_DEBUGLINE_STD)
  281.     {
  282.         $this->addDebug($info$type);
  283.     }
  284.  
  285.     /**
  286.      * This is an alias for the addDebug function when wanting to add a query
  287.      * debug information
  288.      * 
  289.      * @see addDebug(), PHP_DEBUGLINE_QUERY
  290.      * @since V2.0.0 - 21 Apr 2006
  291.      */
  292.     public function query($qry)
  293.     {
  294.         $this->addDebug($qryPHP_DEBUGLINE_QUERY);
  295.     }
  296.  
  297.     /**
  298.      * This is an alias for the addDebug function when wanting to add an
  299.      * application error
  300.      * 
  301.      * @see addDebug(), PHP_DEBUGLINE_APPERROR
  302.      * @since V2.0.0 - 21 Apr 2006
  303.      */
  304.     public function error($info)
  305.     {
  306.         $this->addDebug($infoPHP_DEBUGLINE_APPERROR);
  307.     }
  308.  
  309.     /**
  310.      * Set the callback fucntion to process the watches, enabled depending of
  311.      * the options flag 'DEBUG_enable_watch'
  312.      * 
  313.      * @since V2.0.0 - 16 apr 2006
  314.      * @see options, watches, watchesCallback()
  315.      */
  316.     private function setWatchCallback()
  317.     {
  318.         if ($this->options['DEBUG_enable_watch'== true{
  319.             if (count($this->watches=== 0{
  320.                 $watchMethod array($this'watchesCallback');
  321.                 register_tick_function($watchMethod);
  322.             }
  323.         }
  324.     }
  325.  
  326.     /**
  327.      * Set the callback function to process replace the php error handler,
  328.      * enabled depending of the options flag 'DEBUG_replace_errorhandler'
  329.      * 
  330.      * @since V2.0.0 - 16 apr 2006
  331.      * @see options, errorHandlerCallback()
  332.      */
  333.     private function setErrorHandler()
  334.     {
  335.         if ($this->options['DEBUG_replace_errorhandler'== true{
  336.  
  337.             $errorhandler array(
  338.                 $this,
  339.                 'errorHandlerCallback'
  340.             );
  341.             set_error_handler($errorhandler);
  342.         }
  343.     }
  344.  
  345.     /**
  346.      * Callback function for php error handling
  347.      * 
  348.      * Warning : the only PHP error codes that are processed by this user
  349.      * handler are : E_WARNING, E_NOTICE, E_USER_ERROR
  350.      * For the other error codes the standart php handler will be used
  351.      *
  352.      * @since V2.0.0 - 17 apr 2006
  353.      * @see options, setErrorHandler()
  354.      */
  355.     public function errorHandlerCallback(
  356.     {
  357.         $details func_get_args();
  358.         $popNumber 3;
  359.  
  360.         // We already have line & file with setBackTrace function
  361.         for ($index 0$index $popNumber$index++{
  362.           array_pop($details);    
  363.         }
  364.         
  365.         if ($details[0!= E_STRICT)                            
  366.             $this->addDebug($detailsPHP_DEBUGLINE_PHPERROR);
  367.     }
  368.  
  369.     /**
  370.      * Add a variable to the watchlist. Watched variables must be in a declare
  371.      * (ticks=n) block so that every n ticks the watched variables are checked
  372.      * for changes. If any changes were made, the new value of the variable is
  373.      * recorded
  374.      * 
  375.      * @param string $variableName      Variable to watch
  376.      * @since V2.0.0 - 17 apr 2006
  377.      * @see watchesCallback()
  378.      */
  379.     public function watch($variableName
  380.     {   
  381.         if ($this->options['DEBUG_enable_watch'== true{
  382.             if (isset($GLOBALS[$variableName])) {
  383.                 $this->watches[$variableName$GLOBALS[$variableName];
  384.             else {
  385.                 $this->watches[$variableNamenull;
  386.             }
  387.         else {
  388.             print('<br />The <b>Watch()</b> function is disabled please set the option "DEBUG_enable_watch" to "true" to be able to use this feature<br />');
  389.         }
  390.     }
  391.  
  392.     /**
  393.      * Watch callback function, process watches and add changes to the debug
  394.      * information
  395.      * 
  396.      * @since V2.0.0 - 17 apr 2006
  397.      * @see watch()
  398.      */
  399.     public function watchesCallback(
  400.     {
  401.         // Check if there are variables to watch
  402.         if (count($this->watches)) {
  403.             foreach ($this->watches as $variableName => $variableValue{
  404.                 if ($GLOBALS[$variableName!== $this->watches[$variableName]{
  405.  
  406.                     $info array(
  407.                         $variableName,
  408.                         $this->watches[$variableName],
  409.                         $GLOBALS[$variableName]
  410.                     );
  411.                                         
  412.                     $this->watches[$variableName$GLOBALS[$variableName];
  413.                     $this->addDebug($infoPHP_DEBUGLINE_WATCH);
  414.                 }
  415.             }
  416.         }
  417.     }
  418.  
  419.     /**
  420.      * Get global process time
  421.      * 
  422.      * @return  float             Execution process time of the script
  423.      * 
  424.      * @see getElapsedTime()
  425.      * @since V2.0.0 - 21 Apr 2006
  426.      */ 
  427.     public function getProcessTime()
  428.     {
  429.         return ($this->getElapsedTime($this->startTime$this->endTime));
  430.     }
  431.  
  432.     /**
  433.      * Get database related process time
  434.      * 
  435.      * @return  float      Execection process time of the script for all
  436.      *                         database    specific tasks
  437.      * 
  438.      * @see PHP_DEBUGLINE_QUERY, PHP_DEBUGLINE_QUERYREL
  439.      * @since V2.0.0 - 21 Apr 2006
  440.      */ 
  441.     public function getQueryTime()
  442.     {
  443.         $queryTime 0;        
  444.         
  445.         foreach($this->debugLineBuffer as $lkey => $lvalue)  {
  446.             $properties $lvalue->getProperties();
  447.             if ($properties['type'== PHP_DEBUGLINE_QUERY OR $properties['type'== PHP_DEBUGLINE_QUERYREL{
  448.                 if (!empty($properties['endTime'])) {
  449.                     $queryTime $queryTime $this->getElapsedTime($properties['startTime']$properties['endTime']);
  450.                 }
  451.             }
  452.         }
  453.         return $queryTime;
  454.     }
  455.  
  456.     /**
  457.      * PHP_Debug default output function, first we finish the processes and
  458.      * then a render object is created and its render method is invoked
  459.      * 
  460.      * The renderer used is set with the options, all the possible renderer
  461.      * are in the directory Debug/Renderer/*.php
  462.      * (not the files ending by '_Config.php')
  463.      * 
  464.      * @since V2.0.0 - 13 apr 2006
  465.      * @see Debug_Renderer
  466.      */
  467.     public function render()
  468.     {
  469.         // Finish process
  470.         $this->endTime = Debug::getMicroTime(microtime());
  471.  
  472.         // Render output if we are allowed to
  473.         if ($this->isAllowed()) {
  474.  
  475.             // Create render object and invoke its render function
  476.             $renderer Debug_Renderer::factory($this$this->options);
  477.     
  478.             // Get required files here to have event all Debug classes
  479.             $this->requiredFiles = get_required_files();
  480.     
  481.             // Call rendering
  482.             $renderer->render();
  483.         }
  484.     }
  485.  
  486.     /**
  487.      * Alias for the render function
  488.      * 
  489.      * @since V2.0.0 - 17 apr 2006
  490.      * @see render()
  491.      */
  492.     public function display()
  493.     {
  494.         $this->render();
  495.     }
  496.     
  497.     /**
  498.      * Return the display
  499.      * 
  500.      * @since V2.0.1 - 17 apr 2006
  501.      * @see render()
  502.      */
  503.     public function getDisplay()
  504.     {
  505.         ob_start();
  506.         $this->render();
  507.         $dbgBuffer ob_get_contents();
  508.         ob_end_clean();
  509.         return $dbgBuffer;
  510.     }
  511.     
  512.  
  513.     /**
  514.      * Restrict access to a list of IP
  515.      * 
  516.      * @param array $ip     Array with IP to allow access
  517.      * @since 11 Apr 2006
  518.      * @see $options, isAllowed()
  519.      */ 
  520.     function restrictAcess($ip)
  521.     {
  522.         $this->options['DEBUG_allowed_ip'$ip;
  523.     }
  524.  
  525.     /**
  526.      * Test if the client is allowed to access the debug information
  527.      * There are several possibilities :
  528.      * - 'DEBUG_restrict_access' flag is set to false
  529.      * - 'DEBUG_restrict_access' flag is set to true and client IP is the
  530.      * allowed ip in the options 'DEBUG_allowed_ip'
  531.      * - Access by url is allowed with flag 'DEBUG_allow_url_access' then
  532.      * the client must enter the good key and password in the url
  533.      * 
  534.      * @since V2.0.0 - 20 apr 2006
  535.      * @see $options, restrictAcess()
  536.      */ 
  537.     private function isAllowed()
  538.     {
  539.         if ($this->options['DEBUG_restrict_access'== true{
  540.  
  541.             // Check if client IP is among the allowed ones
  542.             if (in_array($_SERVER['REMOTE_ADDR']$this->options['DEBUG_allowed_ip'])) {
  543.                 return true;
  544.             }
  545.             // Check if instant access is allowed and test key and password
  546.             elseif ($this->options['DEBUG_allow_url_access'== true{
  547.                 
  548.                 $key $this->options['DEBUG_url_key'];
  549.                 
  550.                 if (!empty($_GET[$key])) {
  551.                     if ($_GET[$key== $this->options['DEBUG_url_pass']{
  552.                         return true;
  553.                     else {
  554.                         return false;                        
  555.                     }
  556.                 }
  557.                 else {
  558.                     return false;
  559.                 }                
  560.             else {
  561.                 return false;
  562.             }
  563.         else {
  564.             // Access is not restricted
  565.             return true;
  566.         }
  567.     }
  568.  
  569.     /**
  570.      * Return microtime from a timestamp
  571.      *   
  572.      * @param $time     Timestamp to retrieve micro time
  573.      * @return numeric  Microtime of timestamp param
  574.      * 
  575.      * @since V1.1.0 - 14 Nov 2003
  576.      * @see $DebugMode
  577.      */ 
  578.     static function getMicroTime($time)
  579.     {   
  580.         list($usec$secexplode(' '$time);
  581.         return ((float)$usec + (float)$sec);
  582.     }
  583.  
  584.     /**
  585.      * Alias for getMicroTime(microtime()
  586.      *   
  587.      * @see getMicroTime()
  588.      * @since V2.0.0 - 19 apr 2006
  589.      */ 
  590.     static function getMicroTimeNow()
  591.     {   
  592.         return Debug::getMicroTime(microtime())
  593.     }
  594.  
  595.     /**
  596.      * Get elapsed time between 2 timestamp
  597.      *   
  598.      * @param   float $timeStart    Start time
  599.      * @param   float $timeEnd      End time
  600.      * @return  float               Numeric difference between the two times
  601.      *                               ref in format 00.0000 sec
  602.      * 
  603.      * @see getMicroTime()
  604.      * @since 20 Oct 2003
  605.      */ 
  606.     static function getElapsedTime($timeStart$timeEnd)
  607.     {           
  608.         return round($timeEnd $timeStart4);
  609.     }
  610.  
  611.     /**
  612.      * Set the endtime for a Debug_Line in order to monitor the performance
  613.      * of a part of script
  614.      *   
  615.      * @see Debug_Line::endTime
  616.      * @since V2.0.0 - 19 apr 2006
  617.      */ 
  618.     public function stopTimer()
  619.     {
  620.         $this->debugLineBuffer[count($this->debugLineBuffer)-1]->setEndTime(Debug::getMicroTimeNow());
  621.     }
  622.  
  623.     /**
  624.      * Display the content of any kind of variable
  625.      * 
  626.      * - Mode PHP_DEBUG_DUMP_ARR_DISP display the array
  627.      * - Mode PHP_DEBUG_DUMP_ARR_STR return the infos as a string
  628.      * 
  629.      * @param   mixed       $var        Variable to dump
  630.      * @param   string      $varname    Name of the variable
  631.      * @param   integer     $mode       Mode of function
  632.      * @return  mixed                   Nothing or string depending on the mode
  633.      * 
  634.      * @todo I don't know if it is a good practice to have static properties
  635.      *  for static functions, to check
  636.      * 
  637.      * @since V2.0.0 - 25 Apr 2006
  638.      */ 
  639.     static function dumpVar($var$varName PHP_DEBUG_DUMP_VARNAME$mode PHP_DEBUG_DUMP_DISP)
  640.     {
  641.         // Check Pear Activation
  642.         if (PHP_DEBUG_VERSION == PHP_DEBUG_VERSION_PEAR
  643.             $dumpMethod self::$staticOptions['DEBUG_pear_var_dump_method'];
  644.         else
  645.             $dumpMethod self::$staticOptions['DEBUG_dump_method'];
  646.  
  647.         ob_start();
  648.         $dumpMethod($var);
  649.         $dbgBuffer htmlentities(ob_get_contents());
  650.         ob_end_clean();
  651.         
  652.         switch ($mode{
  653.             default:            
  654.             case PHP_DEBUG_DUMP_DISP:
  655.  
  656.                 if (empty($varName)) {
  657.                     if (is_array($var)) {
  658.                         $varName 'Array';
  659.                     elseif (is_object($var)) {
  660.                         $varName get_class($var);
  661.                     else {
  662.                         $varName 'Variable';                              
  663.                     }
  664.                 }
  665.             
  666.                 $dbgBuffer "<pre><b>dump of '$varName'</b> :"CR$dbgBuffer'</pre>';
  667.                 print($dbgBuffer);
  668.                 break;
  669.                 
  670.             case PHP_DEBUG_DUMP_STR:
  671.                 return($dbgBuffer);
  672.         }        
  673.     }
  674.  
  675.    /**
  676.      * This a method to dump the content of any variable and add the result in
  677.      * the debug information
  678.      * 
  679.      * @param   mixed       $var        Variable to dump
  680.      * @param   string      $varname    Name of the variable
  681.      * 
  682.      * @since V2.0.0 - 25 Apr 2006
  683.      */  
  684.     public function dump($obj$varName STR_N)
  685.     {
  686.         $info[$varName;
  687.         $info[$obj;
  688.         $this->addDebug($infoPHP_DEBUGLINE_DUMP);
  689.     }
  690.  
  691.    /**
  692.      * Set the main action of PHP script
  693.      * 
  694.      * @param string $action Name of the main action of the file
  695.      * 
  696.      * @since V2.0.0 - 25 Apr 2006
  697.      * @see PHP_DEBUGLINE_CURRENTFILE
  698.      */  
  699.     public function setAction($action)    
  700.     {
  701.         $this->add($actionPHP_DEBUGLINE_PAGEACTION);
  702.     }
  703.  
  704.     /**
  705.      * Get one option
  706.      *
  707.      * @param string $optionsIdx Name of the option to get
  708.      * @since V2.0.0 - 13 apr 2006
  709.      */
  710.     public function getOption($optionIdx)
  711.     {
  712.         return $this->options[$optionIdx];
  713.     }
  714.  
  715.     /**
  716.      * Return the style sheet of the HTML_TABLE debug object
  717.      * 
  718.      * @return string The stylesheet
  719.      */    
  720.     public function getStyleSheet()
  721.     {
  722.         return $this->options['HTML_TABLE_stylesheet'];
  723.     }
  724.  
  725.     /**
  726.      * Getter of requiredFiles property
  727.      * 
  728.      * @return array Array with the included/required files
  729.      * @since V2.0.0 - 13 apr 2006
  730.      * @see requiredFiles
  731.      */
  732.     public function getRequiredFiles()
  733.     {
  734.         return $this->requiredFiles;
  735.     }
  736.  
  737.     /**
  738.      * Getter of debugString property
  739.      * 
  740.      * @since V2.0.0 - 13 apr 2006
  741.      * @see debugLineBuffer
  742.      */
  743.     public function getDebugBuffer()
  744.     {
  745.         return $this->debugLineBuffer;           
  746.     }
  747.  
  748.     /**
  749.      * Getter of queryCount property
  750.      * 
  751.      * @since @since V2.0.0 - 21 Apr 2006
  752.      * @see queryCount
  753.      */
  754.     public function getQueryCount()
  755.     {
  756.         return $this->queryCount;           
  757.     }
  758.  
  759.     /**
  760.      * Debug default output function, simply uses the static dump fonction
  761.      * of this class
  762.      * 
  763.      * @since V2.0.0 - 11 apr 2006
  764.      * @see dump
  765.      */
  766.     public function __tostring()
  767.     {
  768.         return '<pre>'Debug::dumpVar($this__CLASS__. ' class instance'PHP_DEBUG_DUMP_STR)'</pre>';  
  769.     }
  770.  
  771.     /**
  772.      * Debug class destructor
  773.      * 
  774.      * @since V2.0.0 - 11 apr 2006
  775.      */     
  776.     function __destruct()
  777.     {        
  778.     }
  779.  
  780. // {{{ constants
  781.  
  782. /**
  783.  * PHP_DEBUGLINE Types
  784.  *
  785.  * - PHP_DEBUGLINE_ANY          : All available types (for search mode)
  786.  * - PHP_DEBUGLINE_STD          : Standart debug
  787.  * - PHP_DEBUGLINE_QUERY        : Query debug
  788.  * - PHP_DEBUGLINE_REL          : Database related debug
  789.  * - PHP_DEBUGLINE_ENV          : Environment debug ($GLOBALS...)
  790.  * - PHP_DEBUGLINE_APPERROR     : Custom application error
  791.  * - PHP_DEBUGLINE_CREDITS      : Credits information
  792.  * - PHP_DEBUGLINE_SEARCH       : Search mode in debug
  793.  * - PHP_DEBUGLINE_DUMP         : Dump any kind of variable
  794.  * - PHP_DEBUGLINE_PROCESSPERF  : Performance analysys
  795.  * - PHP_DEBUGLINE_TEMPLATES    : Included templates of the calling script
  796.  * - PHP_DEBUGLINE_PAGEACTION   : Store main page action
  797.  * - PHP_DEBUGLINE_SQLPARSE     : SQL Parse error
  798.  * - PHP_DEBUGLINE_WATCH        : A variable to watch
  799.  * - PHP_DEBUGLINE_PHPERROR     : A debug generated by the custom error handler
  800.  *
  801.  * @todo Currentfile is deprecated, numbers to resequence
  802.  * @category Debug_Line
  803.  */
  804. define('PHP_DEBUGLINE_ANY',         0);
  805. define('PHP_DEBUGLINE_STD',         1);
  806. define('PHP_DEBUGLINE_QUERY',       2);
  807. define('PHP_DEBUGLINE_QUERYREL',    3);
  808. define('PHP_DEBUGLINE_ENV',         4);
  809. define('PHP_DEBUGLINE_APPERROR',    5);
  810. define('PHP_DEBUGLINE_CREDITS',     6);
  811. define('PHP_DEBUGLINE_SEARCH',      7);
  812. define('PHP_DEBUGLINE_DUMP',        8);
  813. define('PHP_DEBUGLINE_PROCESSPERF'9);
  814. define('PHP_DEBUGLINE_TEMPLATES',   10);
  815. define('PHP_DEBUGLINE_PAGEACTION',  11);
  816. define('PHP_DEBUGLINE_SQLPARSE',    12);
  817. define('PHP_DEBUGLINE_WATCH',       13);
  818. define('PHP_DEBUGLINE_PHPERROR',    14);
  819. define('PHP_DEBUGLINE_DEFAULT',     PHP_DEBUGLINE_STD);
  820.  
  821.  
  822.  
  823. // }}}
  824.  
  825. class Debug_Line 
  826. {
  827.     
  828.    /** 
  829.       * Labels for debugline types
  830.       *
  831.       */
  832.     static $debugLineLabels array(
  833.         PHP_DEBUGLINE_ANY         => 'ALL'
  834.         PHP_DEBUGLINE_STD         => 'Standart',
  835.         PHP_DEBUGLINE_QUERY       => 'Query'
  836.         PHP_DEBUGLINE_QUERYREL    => 'Database related',
  837.         PHP_DEBUGLINE_ENV         => 'Environment',
  838.         PHP_DEBUGLINE_APPERROR    => 'Application error',
  839.         PHP_DEBUGLINE_CREDITS     => 'Credits',
  840.         PHP_DEBUGLINE_SEARCH      => 'Search',
  841.         PHP_DEBUGLINE_DUMP        => 'Variable dump',
  842.         PHP_DEBUGLINE_PROCESSPERF => 'Performance analysis',
  843.         PHP_DEBUGLINE_TEMPLATES   => 'Included files',
  844.         PHP_DEBUGLINE_PAGEACTION  => 'Page main action',
  845.         PHP_DEBUGLINE_SQLPARSE    => 'SQL parse error',
  846.         PHP_DEBUGLINE_WATCH       => 'Watch',
  847.         PHP_DEBUGLINE_PHPERROR    => 'PHP error'
  848.     );    
  849.     
  850.     /**
  851.      * Properties that stores the non formatted debug information
  852.      * 
  853.      * @since V2.0.0 - 11 apr 2006
  854.      * @var string 
  855.      */     
  856.     private $info;
  857.     
  858.     /**
  859.      * Type of the debug information
  860.      * 
  861.      * @since V2.0.0 - 11 apr 2006
  862.      * @see Debug_Line constants
  863.      * @var integer 
  864.      */     
  865.     private $type;
  866.  
  867.     /** 
  868.      * File of debug info
  869.      * 
  870.      * @since V2.0.0 - 11 apr 2006
  871.      * @var integer 
  872.      */
  873.     private $file;
  874.  
  875.     /** 
  876.      * Line of debug info
  877.      * 
  878.      * @since V2.0.0 - 11 apr 2006
  879.      * @var integer 
  880.      */
  881.     private $line;
  882.         
  883.     /** 
  884.      * Class from witch the debug was called
  885.      * 
  886.      * @since V2.0.0 - 13 apr 2006
  887.      * @var integer 
  888.      */
  889.     private $class;
  890.  
  891.     /** 
  892.      * Function from wich the debug was called
  893.      * 
  894.      * @var integer 
  895.      * @since V2.0.0 - 11 apr 2006
  896.      */
  897.     private $function;
  898.     
  899.     /** 
  900.      * Exection time for debug info
  901.      * 
  902.      * @var float 
  903.      * @see stopTimer()
  904.      * @since V2.0.0 - 16 apr 2006
  905.      */
  906.     private $startTime;
  907.  
  908.     /** 
  909.      * Exection end time for debug info
  910.      * 
  911.      * @see Debug::stopTimer(), setEndTime()
  912.      * @since V2.0.0 - 16 apr 2006
  913.      * @var float 
  914.      */
  915.     private $endTime;
  916.  
  917.     /**
  918.      * PHP_DebugLine class constructor
  919.      * 
  920.      * Here it is set :
  921.      * - the start time of the debug info
  922.      * - the traceback information
  923.      *
  924.      * @since V2.0.0 - 11 apr 2006
  925.      * @see Debug::add()
  926.      */
  927.     function __construct($info$type PHP_DEBUGLINE_DEFAULT)
  928.     {
  929.         $this->startTime = Debug::getMicroTimeNow();
  930.         $this->info = $info;
  931.         $this->type = $type;
  932.         $this->setTraceback();
  933.     }
  934.  
  935.     /**
  936.      * Fills properties of debug line with backtrace informations
  937.      * 
  938.      * @since @since V2.0.0 - 15 apr 2006
  939.      */
  940.     protected function setTraceback()
  941.     {
  942.         $callStack debug_backtrace();
  943.         $idx 0;
  944.         
  945.         // Get max id of 'add' debug functions  
  946.         foreach($callStack as $lkey => $lvalue{
  947.             if (in_array($callStack[$lkey]['function']Debug::$excludedBackTraceFunctions== true{
  948.                 $idx $lkey;
  949.             }
  950.         }
  951.  
  952.         $this->file     = !empty($callStack[$idx]  ['file'])     $callStack[$idx]['file']       '';
  953.         $this->line     = !empty($callStack[$idx]  ['line'])     $callStack[$idx]['line']       '';
  954.         $this->function = !empty($callStack[$idx+1]['function']$callStack[$idx+1]['function''';
  955.         $this->class    = !empty($callStack[$idx+1]['class'])    $callStack[$idx+1]['class']    '';
  956.     }
  957.  
  958.     /**
  959.      * Getter of all properties of Debug_Line object
  960.      * 
  961.      * @return array    Array containg all the properties of the debugline
  962.      * @since V2.0.0 - 21 apr 2006
  963.      */
  964.     public function getProperties()
  965.     {
  966.         return array(
  967.             'class'     => $this->class,
  968.             'file'      => $this->file,
  969.             'function'  => $this->function,
  970.             'line'      => $this->line,
  971.             'info'      => $this->info,
  972.             'type'      => $this->type,
  973.             'startTime' => $this->startTime,
  974.             'endTime'   => $this->endTime
  975.         );
  976.     }
  977.  
  978.     /**
  979.      * setter of endTime
  980.      * 
  981.      * @since V2.0.0 - 19 apr 2006
  982.      */
  983.     public function setEndTime($endTime)
  984.     {
  985.         $this->endTime = $endTime;           
  986.     }
  987.  
  988.     /**
  989.      * Debug_Line default output function
  990.      * 
  991.      * @since V2.0.0 - 11 apr 2006
  992.      * @see Debug::dumpVar()
  993.      */
  994.     function __tostring()
  995.     {
  996.         return '<pre>'Debug::dumpVar($this__CLASS__PHP_DEBUG_DUMP_ARR_STR)'</pre>';
  997.     }
  998.  
  999.     /**
  1000.      * Debug_Line class destructor
  1001.      * 
  1002.      * @since V2.0.0 - 11 apr 2006
  1003.      */
  1004.     function __destruct()
  1005.     {
  1006.     }
  1007. }
  1008.  
  1009. ?>

Documentation generated on Thu, 07 Sep 2006 00:36:16 +0200 by phpDocumentor 1.3.0