linea21-externals
[ class tree: linea21-externals ] [ index: linea21-externals ] [ all elements ]

Source for file Debug.php

Documentation is available at Debug.php

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  3.  
  4. /**
  5.  * PHP_Debug : A simple and fast way to debug your PHP code
  6.  *
  7.  * The basic purpose of PHP_Debug is to provide assistance in debugging PHP
  8.  * code, by 'debug' i don't mean 'step by step debug' but program trace,
  9.  * variables display, process time, included files, queries executed, watch
  10.  * variables... These informations are gathered through the script execution and
  11.  * therefore are displayed at the end of the script (in a nice floating div or a
  12.  * html table) so that it can be read and used at any moment. (especially
  13.  * usefull during the development phase of a project or in production with a
  14.  * secure key/ip)
  15.  *
  16.  * PHP version 5 only
  17.  *
  18.  * Copyright (c) 2007 - Vernet Loïc
  19.  
  20.  * Permission is hereby granted, free of charge, to any person obtaining a copy
  21.  * of this software and associated documentation files (the "Software"), to deal
  22.  * in the Software without restriction, including without limitation the rights
  23.  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  24.  * copies of the Software, and to permit persons to whom the Software is
  25.  * furnished to do so, subject to the following conditions:
  26.  *
  27.  * The above copyright notice and this permission notice shall be included in
  28.  * all copies or substantial portions of the Software.
  29.  *
  30.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  32.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  33.  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  34.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35.  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  36.  * THE SOFTWARE.
  37.  *
  38.  * @package    linea21.externals
  39.  * @subpackage PHP_DEBUG
  40.  * @author     Vernet Loïc <qrf_coil[at]yahoo.fr>, modified by Linea21 <info@linea21.com>
  41.  * @copyright  1997-2007 The PHP Group
  42.  * @license    http://www.opensource.org/licenses/mit-license.php MIT
  43.  * @link       http://pear.php.net/package/PHP_Debug
  44.  * @link       http://phpdebug.sourceforge.net
  45.  * @link       http://www.php-debug.com
  46.  * @see          Text_Highlighter
  47.  * @see        Var_Dump, SQL_Parser
  48.  * @since      1.0.0RC1
  49.  * @version    CVS: $Id: Debug.php,v 1.6 2009/01/12 21:13:00 c0il Exp $
  50.  */
  51.  
  52. /**
  53.  * Factory class for renderer of Debug class
  54.  *
  55.  * @see Debug/Renderer/*.php
  56.  */
  57. require_once 'DebugLine.php';
  58. require_once 'Debug/Renderer.php';
  59.  
  60. /**
  61.  * External constants
  62.  *
  63.  * @filesource
  64.  * @package PHP_Debug
  65.  */
  66. if (!defined('CR')) {
  67.   define('CR'"\n");
  68. }
  69.  
  70. class PHP_Debug
  71. {
  72.  
  73.   /**
  74.    * Possible version of class Debug
  75.    */
  76.   const VERSION_STANDALONE 0;
  77.   const VERSION_PEAR       1;
  78.   const VERSION_DEFAULT    self::VERSION_STANDALONE;
  79.   const VERSION            self::VERSION_STANDALONE;
  80.   const RELEASE            'V2.1.5';
  81.   const PEAR_RELEASE       'V1.0.3';
  82.  
  83.   /**
  84.    * These are constant for dump() and DumpObj() functions.
  85.    *
  86.    * - DUMP_DISP : Tell the function to display the debug info.
  87.    * - DUMP_STR  : Tell the fonction to return the debug info as a string
  88.    * - DUMP_VARNAME : Default name of Array - DBG_ARR_OBJNAME : Default name
  89.    * of Object
  90.    */
  91.   const DUMP_DISP 1;
  92.   const DUMP_STR  2;
  93.   const DUMP_VARNAME 'Variable';
  94.  
  95.   /**
  96.    * These are constant for addDebug functions, they set the behaviour where
  97.    * the function should add the debug information in first or in last
  98.    * position
  99.    */
  100.   const POSITIONLAST =  0;
  101.   const POSITIONFIRST 1;
  102.  
  103.   /**
  104.    * These are constants to define Super array environment variables
  105.    */
  106.   const GLOBAL_GET     0;
  107.   const GLOBAL_POST    1;
  108.   const GLOBAL_FILES   2;
  109.   const GLOBAL_COOKIE  3;
  110.   const GLOBAL_REQUEST 4;
  111.   const GLOBAL_SESSION 5;
  112.   const GLOBAL_GLOBALS 6;
  113.  
  114.   /**
  115.    * Default configuration options
  116.    *
  117.    * @since V2.0.0 - 16 apr 2006
  118.    * @see setOptions()
  119.    * @var array 
  120.    */
  121.   protected $defaultOptions = array(
  122.         'render_mode'          => 'Div',              // Renderer mode
  123.         'render_type'          => 'HTML',             // Renderer type
  124.         'restrict_access'      => false,              // Restrict or not the access
  125.         'allowed_ip'           => array('127.0.0.1')// Authorized IP to view the debug when restrict_access is true
  126.         'allow_url_access'     => false,              // Allow to access the debug with a special parameter in the url
  127.         'url_key'              => 'debug',            // Key for url instant access
  128.         'url_pass'             => 'true',             // Password for url instant access
  129.         'enable_watch'         => false,              // Enable the watch function
  130.         'replace_errorhandler' => true,               // Replace or no the PHP errorhandler
  131.         'lang'                 => 'EN',               // Language
  132.   );
  133.  
  134.   /**
  135.    * Default static options for static functions
  136.    *
  137.    * @since V2.0.0 - 16 apr 2006
  138.    * @see dump()
  139.    * @var array 
  140.    */
  141.   protected static $staticOptions array(
  142.         'dump_method'          => 'print_r',          // print_r or var_dump
  143.         'pear_var_dump_method' => 'Var_Dump::display' // Var_Dump display funtion (not used for now)
  144.   );
  145.  
  146.   /**
  147.    * Functions from this class that must be excluded in order to have the
  148.    * correct backtrace information
  149.    *
  150.    * @see PHP_DebugLine::setTraceback()
  151.    * @since V2.0.0 - 13 apr 2006
  152.    * @var array 
  153.    */
  154.   public static $excludedBackTraceFunctions array(
  155.         'add'
  156.         'dump',
  157.         'error'
  158.         'query'
  159.         'addDebug'
  160.         'setAction'
  161.         'addDebugFirst',
  162.         'watchesCallback',
  163.         'errorHandlerCallback'
  164.         );
  165.  
  166.         /**
  167.          * Correspondance between super array constant and variable name
  168.          * Used by renderers
  169.          *
  170.          * @since V2.0.0 - 18 apr 2006
  171.          * @var array 
  172.          */
  173.         public static $globalEnvConstantsCorresp array(
  174.         self::GLOBAL_GET    => '_GET',
  175.         self::GLOBAL_POST   => '_POST',
  176.         self::GLOBAL_FILES  => '_FILES',
  177.         self::GLOBAL_COOKIE => '_COOKIE',
  178.         self::GLOBAL_REQUEST=> '_REQUEST',
  179.         self::GLOBAL_SESSION=> '_SESSION',
  180.         self::GLOBAL_GLOBALS=> 'GLOBALS'
  181.         );
  182.  
  183.         /**
  184.          * Default configuration options
  185.          *
  186.          * @since V2.0.0 - 13 apr 2006
  187.          * @see setOptions()
  188.          * @var array 
  189.          */
  190.         protected $options = array();
  191.  
  192.         /**
  193.          * This is the array where the debug lines are collected.
  194.          *
  195.          * @since V2.0.0 - 11 apr 2006
  196.          * @see DebugLine
  197.          * @var array 
  198.          */
  199.         protected  $debugLineBuffer = array();
  200.  
  201.         /**
  202.          * This is the array containing all the required/included files of the
  203.          * script
  204.          *
  205.          * @since V2.0.0 - 17 apr 2006
  206.          * @see render(), PHP_DebugLine::TYPE_TEMPLATES
  207.          * @var array 
  208.          */
  209.         protected $requiredFiles = array();
  210.  
  211.         /**
  212.          * This is the array containing all the watched variables
  213.          *
  214.          * @since V2.0.0 - 16 apr 2006
  215.          * @see watch()
  216.          * @var array 
  217.          */
  218.         protected $watches = array();
  219.  
  220.         /**
  221.          * Execution start time
  222.          *
  223.          * @since V2.0.0 - 11 apr 2006
  224.          * @see __construct()
  225.          * @var float 
  226.          */
  227.         protected $startTime;
  228.  
  229.         /**
  230.          * Exection end time
  231.          *
  232.          * @since V2.0.0 - 11 apr 2006
  233.          * @see render()
  234.          * @var float 
  235.          */
  236.         protected $endTime;
  237.  
  238.         /**
  239.          * Number of queries executed during script
  240.          *
  241.          * @since V2.0.0 - 19 apr 2006
  242.          * @var integer 
  243.          */
  244.         protected $queryCount = 0;
  245.  
  246.         /**
  247.          * PHP_Debug class constructor
  248.          *
  249.          * Here we set :
  250.          * - the execution start time
  251.          * - the options
  252.          * - the error and watch call back functions
  253.          *
  254.          * @param array $options    Array containing options to affect to Debug
  255.          *                           object and his childs
  256.          *
  257.          * @since V2.0.0 - 11 apr 2006
  258.          */
  259.         function __construct($options array())
  260.         {
  261.           $this->startTime = PHP_Debug::getMicroTimeNow();
  262.           $this->options = array_merge($this->defaultOptions$options);
  263.           $this->setWatchCallback();
  264.           $this->setErrorHandler();
  265.         }
  266.  
  267.         /**
  268.          * Add a debug information
  269.          *
  270.          * @param string  $info  The main debug information
  271.          *                       (may be empty for some debug line types)
  272.          * @param integer $type Type of the DebugLine
  273.          *
  274.          * @see Debug constants
  275.          * @since V1.0.0 - 07 Apr 2006
  276.          */
  277.         public function addDebug($info$type PHP_DebugLine::TYPE_STD,
  278.         $position self::POSITIONLAST)
  279.         {
  280.           // Add info
  281.           $debugLine new PHP_DebugLine($info$type);
  282.           if ($position == self::POSITIONLAST{
  283.             $this->debugLineBuffer[$debugLine;
  284.           else {
  285.             array_unshift($this->debugLineBuffer$debugLine);
  286.           }
  287.  
  288.           // Additional process for some types
  289.           switch ($type{
  290.             case PHP_DebugLine::TYPE_QUERY:
  291.               $this->queryCount++;
  292.               break;
  293.  
  294.             default:
  295.               break;
  296.           }
  297.  
  298.           // Return debugline
  299.           return $debugLine;
  300.         }
  301.  
  302.         /**
  303.          * Add a debug info before all the existing other debug lines
  304.          * It is an alias for addDebug($info, self::POSITIONLAST)
  305.          *
  306.          * @see addDebug
  307.          * @since V1.0.0 - 13 Apr 2006
  308.          */
  309.         public function addDebugFirst($info$type PHP_DebugLine::TYPE_STD)
  310.         {
  311.           return $this->addDebug($info$typeself::POSITIONFIRST);
  312.         }
  313.  
  314.         /**
  315.          * This is an alias for the addDebug function
  316.          *
  317.          * @see addDebug()
  318.          * @since  V2.0.0 - 20 apr 2006
  319.          */
  320.         public function add($info$type PHP_DebugLine::TYPE_STD)
  321.         {
  322.           return $this->addDebug($info$type);
  323.         }
  324.  
  325.         /**
  326.          * This is an alias for the addDebug function when wanting to add a query
  327.          * debug information
  328.          *
  329.          * @see addDebug(), PHP_DebugLine::TYPE_QUERY
  330.          * @since V2.0.0 - 21 Apr 2006
  331.          */
  332.         public function query($qry)
  333.         {
  334.           return $this->addDebug($qryPHP_DebugLine::TYPE_QUERY);
  335.         }
  336.  
  337.         /**
  338.          * This is an alias for the addDebug function when wanting to add a
  339.          * database related debug info
  340.          *
  341.          * @see addDebug(), PHP_DebugLine::TYPE_QUERYREL
  342.          * @since V2.1.0 - 3 apr 2007
  343.          */
  344.         public function queryRel($info)
  345.         {
  346.           return $this->addDebug($infoPHP_DebugLine::TYPE_QUERYREL);
  347.         }
  348.  
  349.         /**
  350.          * This is an alias for the addDebug function when wanting to add an
  351.          * application error
  352.          *
  353.          * @see addDebug(), PHP_DebugLine::TYPE_APPERROR
  354.          * @since V2.0.0 - 21 Apr 2006
  355.          */
  356.         public function error($info)
  357.         {
  358.           return $this->addDebug($infoPHP_DebugLine::TYPE_APPERROR);
  359.         }
  360.  
  361.         /**
  362.          * This is an alias for adding the monitoring of processtime
  363.          *
  364.          * @see addDebug(), PHP_DebugLine::TYPE_PROCESSPERF
  365.          * @since V2.1.0 - 21 Apr 2006
  366.          */
  367.         public function addProcessPerf()
  368.         {
  369.           return $this->addDebug(''PHP_DebugLine::TYPE_PROCESSPERF);
  370.         }
  371.  
  372.         /**
  373.          * This a method to dump the content of any variable and add the result in
  374.          * the debug information
  375.          *
  376.          * @param   mixed       $var        Variable to dump
  377.          * @param   string      $varname    Name of the variable
  378.          *
  379.          * @since V2.0.0 - 25 Apr 2006
  380.          */
  381.         public function dump($obj$varName '')
  382.         {
  383.           $info[$varName;
  384.           $info[$obj;
  385.           return $this->addDebug($infoPHP_DebugLine::TYPE_DUMP);
  386.         }
  387.  
  388.         /**
  389.          * Set the main action of PHP script
  390.          *
  391.          * @param string $action Name of the main action of the file
  392.          *
  393.          * @since V2.0.0 - 25 Apr 2006
  394.          * @see PHP_DebugLine::TYPE_CURRENTFILE
  395.          */
  396.         public function setAction($action)
  397.         {
  398.           $this->add($actionPHP_DebugLine::TYPE_PAGEACTION);
  399.         }
  400.  
  401.         /**
  402.          * Add an application setting
  403.          *
  404.          * @param string $action Name of the main action of the file
  405.          *
  406.          * @since V2.1.0 - 02 Apr 2007
  407.          * @see PHP_DebugLine::TYPE_ENV
  408.          */
  409.         public function addSetting($value$name)
  410.         {
  411.           $this->add($name': '$valuePHP_DebugLine::TYPE_ENV);
  412.         }
  413.  
  414.         /**
  415.          * Add a group of settings
  416.          *
  417.          * @param string $action Name of the main action of the file
  418.          *
  419.          * @since V2.1.0 - 2 Apr 2007
  420.          * @see PHP_DebugLine::TYPE_ENV
  421.          */
  422.         public function addSettings($values$name)
  423.         {
  424.           $this->add($name': '.
  425.           PHP_Debug::dumpVar(
  426.           $values,
  427.           $name,
  428.           false,
  429.           PHP_Debug::DUMP_STR
  430.           ),
  431.           PHP_DebugLine::TYPE_ENV
  432.           );
  433.         }
  434.  
  435.         /**
  436.          * Set the callback fucntion to process the watches, enabled depending of
  437.          * the options flag 'enable_watch'
  438.          *
  439.          * @since V2.0.0 - 16 apr 2006
  440.          * @see options, watches, watchesCallback()
  441.          */
  442.         protected function setWatchCallback()
  443.         {
  444.           if ($this->options['enable_watch'== true{
  445.             if (count($this->watches=== 0{
  446.               $watchMethod array($this'watchesCallback');
  447.               register_tick_function($watchMethod);
  448.             }
  449.           }
  450.         }
  451.  
  452.         /**
  453.          * Set the callback function to process replace the php error handler,
  454.          * enabled depending of the options flag 'replace_errorhandler'
  455.          *
  456.          * @since V2.0.0 - 16 apr 2006
  457.          * @see options, errorHandlerCallback()
  458.          */
  459.         protected function setErrorHandler()
  460.         {
  461.           if ($this->options['replace_errorhandler'== true{
  462.  
  463.             $errorhandler array(
  464.             $this,
  465.                 'errorHandlerCallback'
  466.                 );
  467.                 set_error_handler($errorhandler);
  468.           }
  469.         }
  470.  
  471.         /**
  472.          * Callback function for php error handling
  473.          *
  474.          * Warning : the only PHP error codes that are processed by this user
  475.          * handler are : E_WARNING, E_NOTICE, E_USER_ERROR
  476.          * For the other error codes the standart php handler will be used
  477.          *
  478.          * @since V2.0.0 - 17 apr 2006
  479.          * @see options, setErrorHandler()
  480.          */
  481.         public function errorHandlerCallback()
  482.         {
  483.           $details func_get_args();
  484.           $popNumber 3;
  485.  
  486.           // We already have line & file with setBackTrace function
  487.           for ($index 0$index $popNumber$index++{
  488.             array_pop($details);
  489.           }
  490.  
  491.           if ($details[0!= E_STRICT)
  492.           $this->addDebug($detailsPHP_DebugLine::TYPE_PHPERROR);
  493.         }
  494.  
  495.         /**
  496.          * Add a variable to the watchlist. Watched variables must be in a declare
  497.          * (ticks=n) block so that every n ticks the watched variables are checked
  498.          * for changes. If any changes were made, the new value of the variable is
  499.          * recorded
  500.          *
  501.          * @param string $variableName      Variable to watch
  502.          * @since V2.0.0 - 17 apr 2006
  503.          * @see watchesCallback()
  504.          */
  505.         public function watch($variableName)
  506.         {
  507.           if ($this->options['enable_watch'== true{
  508.             if (isset($GLOBALS[$variableName])) {
  509.               $this->watches[$variableName$GLOBALS[$variableName];
  510.             else {
  511.               $this->watches[$variableNamenull;
  512.             }
  513.           else {
  514.             throw new Exception('The Watch function is disabled please set the option \'enable_watch\' to \'true\' to be able to use this feature, it\'s stable with a Unix server');
  515.           }
  516.         }
  517.  
  518.         /**
  519.          * Watch callback function, process watches and add changes to the debug
  520.          * information
  521.          *
  522.          * @since V2.0.0 - 17 apr 2006
  523.          * @see watch()
  524.          */
  525.         public function watchesCallback()
  526.         {
  527.           // Check if there are variables to watch
  528.           if (count($this->watches)) {
  529.             foreach ($this->watches as $variableName => $variableValue{
  530.               if ($GLOBALS[$variableName!== $this->watches[$variableName]{
  531.  
  532.                 $info array(
  533.                 $variableName,
  534.                 $this->watches[$variableName],
  535.                 $GLOBALS[$variableName]
  536.                 );
  537.  
  538.                 $this->watches[$variableName$GLOBALS[$variableName];
  539.                 $this->addDebug($infoPHP_DebugLine::TYPE_WATCH);
  540.               }
  541.             }
  542.           }
  543.         }
  544.  
  545.         /**
  546.          * Get global process time
  547.          *
  548.          * @return  float             Execution process time of the script
  549.          *
  550.          * @see getElapsedTime()
  551.          * @since V2.0.0 - 21 Apr 2006
  552.          */
  553.         public function getProcessTime()
  554.         {
  555.           return $this->getElapsedTime($this->startTime$this->endTime);
  556.         }
  557.  
  558.         /**
  559.          * Get database related process time
  560.          *
  561.          * @return  float      Execection process time of the script for all
  562.          *                         database    specific tasks
  563.          *
  564.          * @see PHP_DebugLine::TYPE_QUERY, PHP_DebugLine::TYPE_QUERYREL
  565.          * @since V2.0.0 - 21 Apr 2006
  566.          */
  567.         public function getQueryTime()
  568.         {
  569.           $queryTime 0;
  570.  
  571.           foreach($this->debugLineBuffer as $lkey => $lvalue)  {
  572.             $properties $lvalue->getProperties();
  573.             if ($properties['type'== PHP_DebugLine::TYPE_QUERY
  574.             || $properties['type'== PHP_DebugLine::TYPE_QUERYREL{
  575.               if (!empty($properties['endTime'])) {
  576.                 $queryTime $queryTime +
  577.                 $this->getElapsedTime(
  578.                 $properties['startTime'],
  579.                 $properties['endTime']);
  580.               }
  581.             }
  582.           }
  583.           return $queryTime;
  584.         }
  585.  
  586.         /**
  587.          * PHP_Debug default output function, first we finish the processes and
  588.          * then a render object is created and its render method is invoked
  589.          *
  590.          * The renderer used is set with the options, all the possible renderer
  591.          * are in the directory Debug/Renderer/*.php
  592.          * (not the files ending by '_Config.php')
  593.          *
  594.          * @since V2.0.0 - 13 apr 2006
  595.          * @see Debug_Renderer
  596.          */
  597.         public function render()
  598.         {
  599.           // Finish process
  600.           $this->endTime = PHP_Debug::getMicroTimeNow();
  601.  
  602.           // Render output if we are allowed to
  603.           if ($this->isAllowed()) {
  604.  
  605.             // Create render object and invoke its render function
  606.             $renderer PHP_Debug_Renderer::factory($this$this->options);
  607.  
  608.             // Get required files here to have event all Debug classes
  609.             $this->requiredFiles = get_required_files();
  610.  
  611.             // Call rendering
  612.             return $renderer->render();
  613.           }
  614.         }
  615.  
  616.         /**
  617.          * Alias for the render function
  618.          *
  619.          * @since V2.0.0 - 17 apr 2006
  620.          * @see render()
  621.          */
  622.         public function display()
  623.         {
  624.           echo $this->render();
  625.         }
  626.  
  627.         /**
  628.          * Return the output without displaying it
  629.          *
  630.          * @since V2.0.1 - 17 apr 2006
  631.          * @see render()
  632.          */
  633.         public function getOutput()
  634.         {
  635.           return $this->render();
  636.         }
  637.  
  638.         /**
  639.          * Restrict access to a list of IP
  640.          *
  641.          * @param array $ip     Array with IP to allow access
  642.          * @since V2.0.0 - 11 Apr 2006
  643.          * @see $options, isAllowed()
  644.          */
  645.         function restrictAccess($ip)
  646.         {
  647.           $this->options['allowed_ip'$ip;
  648.         }
  649.  
  650.         /**
  651.          * Test if the client is allowed to access the debug information
  652.          * There are several possibilities :
  653.          * - 'restrict_access' flag is set to false
  654.          * - 'restrict_access' flag is set to true and client IP is the
  655.          * allowed ip in the options 'allowed_ip'
  656.          * - Access by url is allowed with flag 'allow_url_access' then
  657.          * the client must enter the good key and password in the url
  658.          *
  659.          * @since V2.0.0 - 20 apr 2006
  660.          * @see $options, restrictAcess()
  661.          */
  662.         protected function isAllowed()
  663.         {
  664.           if ($this->options['restrict_access'== true{
  665.  
  666.             // Check if client IP is among the allowed ones
  667.             if (in_array(
  668.             $_SERVER['REMOTE_ADDR'],
  669.             $this->options['allowed_ip']
  670.             )) {
  671.               return true;
  672.             }
  673.             // Check if instant access is allowed and test key and password
  674.             elseif ($this->options['allow_url_access'== true{
  675.  
  676.               $key $this->options['url_key'];
  677.  
  678.               if (!empty($_GET[$key])) {
  679.                 if ($_GET[$key== $this->options['url_pass']{
  680.                   return true;
  681.                 else {
  682.                   return false;
  683.                 }
  684.               }
  685.               else {
  686.                 return false;
  687.               }
  688.             else {
  689.               return false;
  690.             }
  691.           else {
  692.             // Access is not restricted
  693.             return true;
  694.           }
  695.         }
  696.  
  697.         /**
  698.          * Return microtime from a timestamp
  699.          *
  700.          * @param $time     Timestamp to retrieve micro time
  701.          * @return numeric  Microtime of timestamp param
  702.          *
  703.          * @since V1.1.0 - 14 Nov 2003
  704.          * @see $DebugMode
  705.          */
  706.         public static function getMicroTime($time)
  707.         {
  708.           list($usec$secexplode(' '$time);
  709.           return (float)$usec + (float)$sec;
  710.         }
  711.  
  712.         /**
  713.          * Alias for getMicroTime(microtime()
  714.          *
  715.          * @see getMicroTime()
  716.          * @since V2.0.0 - 19 apr 2006
  717.          */
  718.         public static function getMicroTimeNow()
  719.         {
  720.           return PHP_Debug::getMicroTime(microtime());
  721.         }
  722.  
  723.         /**
  724.          * Get elapsed time between 2 timestamp
  725.          *
  726.          * @param   float $timeStart    Start time
  727.          * @param   float $timeEnd      End time
  728.          * @return  float               Numeric difference between the two times
  729.          *                               ref in format 00.0000 sec
  730.          *
  731.          * @see getMicroTime()
  732.          * @since V1.0.0 - 20 Oct 2003
  733.          */
  734.         public static function getElapsedTime($timeStart$timeEnd)
  735.         {
  736.           return round($timeEnd $timeStart4);
  737.         }
  738.  
  739.         /**
  740.          * Returns Uri prefix, including protocol, hostname and server port.
  741.          *
  742.          * @return string Uniform resource identifier prefix
  743.          */
  744.         public static function getUriPrefix()
  745.         {
  746.           $pathArray $_SERVER;
  747.  
  748.           if (PHP_Debug::isSecure()) {
  749.             $standardPort '443';
  750.             $proto 'https';
  751.           else {
  752.             $standardPort '80';
  753.             $proto 'http';
  754.           }
  755.  
  756.           $port $pathArray['SERVER_PORT'== $standardPort || !$pathArray['SERVER_PORT''' ':'.$pathArray['SERVER_PORT'];
  757.           return $proto.'://'$pathArray['SERVER_NAME']$port;
  758.         }
  759.  
  760.         /**
  761.          * Test if url is secured
  762.          *
  763.          * @since V2.1.1 - 23 avr. 2007
  764.          */
  765.         public static function isSecure()
  766.         {
  767.           return $_SERVER['SERVER_PORT'!= 80;
  768.         }
  769.  
  770.         /**
  771.          * Returns current host name.
  772.          *
  773.          * @since    V2.1.1 - 23 avr. 2007
  774.          */
  775.         public static function getHost()
  776.         {
  777.           $pathArray $_SERVER;
  778.           return isset($pathArray['HTTP_X_FORWARDED_HOST']$pathArray['HTTP_X_FORWARDED_HOST'(isset($pathArray['HTTP_HOST']$pathArray['HTTP_HOST''');
  779.         }
  780.  
  781.         /**
  782.          * Returns current script name.
  783.          *
  784.          * @return         string 
  785.          * @since V2.1.1 - 23 avr. 2007
  786.          */
  787.         public static function getScriptName()
  788.         {
  789.           $pathArray $_SERVER;
  790.           return isset($pathArray['SCRIPT_NAME']$pathArray['SCRIPT_NAME'(isset($pathArray['ORIG_SCRIPT_NAME']$pathArray['ORIG_SCRIPT_NAME''');
  791.         }
  792.  
  793.         /**
  794.          * Return the query string
  795.          *
  796.          * @author Vernet Loic
  797.          * @since 2.1.1 - 23 avr. 2007
  798.          */
  799.         public static function getQueryString()
  800.         {
  801.           return $_SERVER['QUERY_STRING''?'$_SERVER['QUERY_STRING''';
  802.         }
  803.  
  804.         /**
  805.          * Return the full url
  806.          *
  807.          * @author Vernet Loi
  808.          * @since 2.1.1 - 23 avr. 2007
  809.          */
  810.         public static function getUrl()
  811.         {
  812.           return self::getUriPrefix()self::getScriptName()self::getQueryString();
  813.         }
  814.  
  815.         /**
  816.          * Set the endtime for a DebugLine in order to monitor the performance
  817.          * of a part of script
  818.          *
  819.          * @see PHP_DebugLine::endTime
  820.          * @since V2.0.0 - 19 apr 2006
  821.          */
  822.         public function stopTimer()
  823.         {
  824.           $this->debugLineBuffer[count($this->debugLineBuffer)-1]->setEndTime();
  825.         }
  826.  
  827.         /**
  828.          * Display the content of any kind of variable
  829.          *
  830.          * - Mode PHP_DEBUG_DUMP_ARR_DISP display the array
  831.          * - Mode PHP_DEBUG_DUMP_ARR_STR return the infos as a string
  832.          *
  833.          * @param   mixed       $var        Variable to dump
  834.          * @param   string      $varname    Name of the variable
  835.          * @param   integer     $mode       Mode of function
  836.          * @param   boolean     $stopExec   Stop the process after display of debug
  837.          * @return  mixed                   Nothing or string depending on the mode
  838.          *
  839.          * @since V2.0.0 - 25 Apr 2006
  840.          */
  841.         public static function dumpVar(
  842.         $var,
  843.         $varName self::DUMP_VARNAME,
  844.         $stopExec false,
  845.         $mode self::DUMP_DISP{
  846.           $dumpMethod self::$staticOptions['dump_method'];
  847.           ob_start();
  848.           $dumpMethod($var);
  849.  
  850.           $dbgBuffer htmlentities(ob_get_contents());
  851.           ob_end_clean();
  852.  
  853.           switch ($mode{
  854.             default:
  855.             case self::DUMP_DISP:
  856.  
  857.               if (empty($varName)) {
  858.                 if (is_array($var)) {
  859.                   $varName 'Array';
  860.                 elseif (is_object($var)) {
  861.                   $varName get_class($var);
  862.                 else {
  863.                   $varName 'Variable';
  864.                 }
  865.               }
  866.  
  867.               $dbgBuffer '<pre><b>dump of \''$varName'\'</b> :'.
  868.               CR$dbgBuffer'</pre>';
  869.               echo $dbgBuffer;
  870.               break;
  871.  
  872.             case PHP_Debug::DUMP_STR:
  873.               return($dbgBuffer);
  874.           }
  875.  
  876.           // Check process stop
  877.           if ($stopExec{
  878.             $backtrace debug_backtrace();
  879.             $dieMsg  '<pre><b>Process stopped by PHP_Debug</b>'CR;
  880.             $dieMsg .= $backtrace[0]['file'?     '&raquo; file     : <b>'.
  881.             $backtrace[0]['file'.'</b>'CR '';
  882.             $dieMsg .= $backtrace[0]['line'?     '&raquo; line     : <b>'.
  883.             $backtrace[0]['line'.'</b>'CR '';
  884.             $dieMsg .= $backtrace[1]['class'?    '&raquo; class    : <b>'.
  885.             $backtrace[1]['class'.'</b>'CR '';
  886.             $dieMsg .= $backtrace[1]['function''&raquo; function : <b>'.
  887.             $backtrace[1]['function'.'</b>'CR '';
  888.             $dieMsg .= '</pre>';
  889.             die($dieMsg);
  890.           }
  891.         }
  892.  
  893.         /**
  894.          * Get one option
  895.          *
  896.          * @param string $optionsIdx Name of the option to get
  897.          * @since V2.0.0 - 13 apr 2006
  898.          */
  899.         public function getOption($optionIdx)
  900.         {
  901.           return $this->options[$optionIdx];
  902.         }
  903.  
  904.         /**
  905.          * Getter of requiredFiles property
  906.          *
  907.          * @return array Array with the included/required files
  908.          * @since V2.0.0 - 13 apr 2006
  909.          * @see requiredFiles
  910.          */
  911.         public function getRequiredFiles()
  912.         {
  913.           return $this->requiredFiles;
  914.         }
  915.  
  916.         /**
  917.          * Getter of debugString property
  918.          *
  919.          * @since V2.0.0 - 13 apr 2006
  920.          * @see debugLineBuffer
  921.          */
  922.         public function getDebugBuffer()
  923.         {
  924.           return $this->debugLineBuffer;
  925.         }
  926.  
  927.         /**
  928.          * Getter of queryCount property
  929.          *
  930.          * @since V2.0.0 - 21 Apr 2006
  931.          * @see queryCount
  932.          */
  933.         public function getQueryCount()
  934.         {
  935.           return $this->queryCount;
  936.         }
  937.  
  938.         /**
  939.          * Debug default output function, simply uses the static dump fonction
  940.          * of this class
  941.          *
  942.          * @since V2.0.0 - 11 apr 2006
  943.          * @see dump
  944.          */
  945.         public function __toString()
  946.         {
  947.           return '<pre>'PHP_Debug::dumpVar(
  948.           $this,
  949.           __CLASS__. ' class instance',
  950.           false,
  951.           PHP_Debug::DUMP_STR
  952.           )'</pre>';
  953.         }
  954. }

Documentation generated on Thu, 03 May 2012 15:03:35 +0200 by phpDocumentor 1.4.1