| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 | 
							- <?php
 
- namespace KIF\Debug;
 
- use KIF\Debug\FirePHP;
 
- use KIF\Core\Config;
 
- /**
 
-  * 
 
-  * Enter description here ...
 
-  * @author gaoxiaogang
 
-  * 用例:
 
-  * KIF\Debug\Debug::start();// 打开
 
-  * register_shutdown_function(array('KIF\Debug\Debug', 'show'));
 
-  */
 
- class Debug
 
- {
 
- 	/**
 
- 	 * @desc Debug开关,默认为关闭
 
- 	 * @var bool
 
- 	 */
 
- 	static $open = false ;
 
- 	/**
 
- 	 * @desc Debug类实例化对象
 
- 	 * @var bool
 
- 	 */
 
- 	static $instance = false;
 
- 	/**
 
- 	 * @desc 运行时间显示数组
 
- 	 * @var array
 
- 	 */
 
- 	static $time_table = array();
 
- 	/**
 
- 	 * @desc 用户自定义中间变量显示数组
 
- 	 * @var array
 
- 	 */
 
- 	static $log_table = array();
 
- 	/**
 
- 	 * @desc 数据库查询执行时间数组
 
- 	 * @var array
 
- 	 */
 
- 	static $db_table = array();
 
- 	/**
 
- 	 * @desc 缓存查询执行时间数组
 
- 	 * @var array
 
- 	 */
 
- 	static $cache_table = array();
 
- 	/**
 
- 	 *
 
- 	 * 全文检索sphinx查询执行时间数组
 
- 	 * @var array
 
- 	 */
 
- 	static $sphinx_table = array();
 
- 	/**
 
- 	 * @desc 表单方式的接口
 
- 	 */
 
- 	static $form_table = array();
 
- 	/**
 
- 	 * @desc 起始时间
 
- 	 * @var int
 
- 	 */
 
- 	static $begin_time;
 
- 	/**
 
- 	 * @name __construct
 
- 	 * @desc 构造函数
 
- 	 */
 
- 	protected function __construct()
 
- 	{
 
- 	}
 
- 	/**
 
- 	 * @name start
 
- 	 * @desc 启动debug类
 
- 	 * @return null
 
- 	 */
 
- 	static public function start()
 
- 	{
 
- 		self::$open = true;
 
- 		self::$begin_time = microtime();
 
- 		self::$time_table = array(array('Description', 'Time', 'Caller'));
 
- 		self::$log_table = array(array('Label', 'Results', 'Caller'));
 
- 	}
 
- 	/**
 
- 	 * @name getTime
 
- 	 * @desc 获得从起始时间到目前为止所花费的时间
 
- 	 * @return int
 
- 	 */
 
- 	static public function getTime()
 
- 	{
 
- 		if(false === self::$open)
 
- 		{
 
- 			return ;
 
- 		}
 
-     	list($pusec, $psec) = explode(" ", self::$begin_time);
 
-     	list($usec, $sec) = explode(" ", microtime());
 
- 		return ((float)$usec - (float)$pusec) + ((float)$sec - (float)$psec);
 
- 	}
 
- 	/**
 
- 	 * @name getInstance
 
- 	 * @desc 返回debug类的实例
 
- 	 * @return object
 
- 	 */
 
- 	static public function getInstance()
 
- 	{
 
- 		if(false === self::$instance)
 
- 		{
 
- 			self::$instance = new self();
 
- 		}
 
- 		return self::$instance;
 
- 	}
 
- 	/**
 
- 	 * @name log
 
- 	 * @desc 记录用户自定义变量
 
- 	 * @param string $label 自定义变量显示名称
 
- 	 * @param mixed $results 自定义变量结果
 
- 	 * @param string $callfile 调用记录用户自定义变量的文件名
 
- 	 * @return null
 
- 	 * @access public
 
- 	 */
 
- 	static public function log($label, $results = '', $caller = '')
 
- 	{
 
- 		if(false === self::$open || (defined('DEBUG_SHOW_LOG') && !DEBUG_SHOW_LOG))
 
- 		{
 
- 			return ;
 
- 		}
 
- 		array_push(self::$log_table, array($label, $results, $caller));
 
- 	}
 
- 	/**
 
- 	 * @name db
 
- 	 * @desc 记录数据库查询操作执行时间
 
- 	 * @param string $ip 数据库IP
 
- 	 * @param int $port 数据库端口
 
- 	 * @param string $sql 执行的SQL语句
 
- 	 * @param float $times 花费时间
 
- 	 * @param mixed $results 查询结果
 
- 	 * @return null
 
- 	 * @access public
 
- 	 */
 
- 	static public function db($ip, $database ,$sql, $times, $results)
 
- 	{
 
- 		if(false === self::$open || (defined('DEBUG_SHOW_DB') && !DEBUG_SHOW_DB))
 
- 		{
 
- 			return ;
 
- 		}
 
- 		array_push(self::$db_table, array($ip, $database, $times, $sql, $results));
 
- 	}
 
- 	/**
 
- 	 * @name cache
 
- 	 * @desc 缓存查询执行时间
 
- 	 * @param array $server 缓存服务器及端口列表
 
- 	 * @param string $key 缓存所使用的key
 
- 	 * @param float $times 花费时间
 
- 	 * @param mixed $results 查询结果
 
- 	 * @return null
 
- 	 * @access public
 
- 	 */
 
- 	static public function cache($server, $key, $times, $results, $method = null)
 
- 	{
 
- 		if(false === self::$open || (defined('DEBUG_SHOW_CACHE') && !DEBUG_SHOW_CACHE))
 
- 		{
 
- 			return ;
 
- 		}
 
- 		array_push(self::$cache_table, array($server ,$key, $times, $results, $method));
 
- 	}
 
- 	/**
 
- 	 * @name 全文检索sphinx
 
- 	 * @desc 全文检索sphinx查询执行时间
 
- 	 * @param array $condition 查询条件
 
- 	 * @param float $times 花费时间
 
- 	 * @param mixed $results 查询结果
 
- 	 * @return null
 
- 	 * @access public
 
- 	 */
 
- 	static public function sphinx($condition, $times, $results, $method = null)
 
- 	{
 
- 		if(false === self::$open || (defined('DEBUG_SHOW_SPHINX') && !DEBUG_SHOW_SPHINX))
 
- 		{
 
- 			return ;
 
- 		}
 
- 		array_push(self::$sphinx_table, array($condition, $times, $results, $method));
 
- 	}
 
- 	/**
 
- 	 * @name time
 
- 	 * @desc 记录程序执行时间
 
- 	 * @param string $desc 描述
 
- 	 * @param mixed $results 结果
 
- 	 * @return null
 
- 	 * @access public
 
- 	 */
 
- 	static public function time($desc, $caller)
 
- 	{
 
- 		if(false === self::$open || (defined('DEBUG_SHOW_TIME') && !DEBUG_SHOW_TIME))
 
- 		{
 
- 			return ;
 
- 		}
 
- 		array_push(self::$time_table, array($desc, self::getTime(), $caller));
 
- 	}
 
- 	/**
 
- 	 * 记录form表单的方式接口请求
 
- 	 * @param label 说明标签
 
- 	 * @param action 表单的请求地址
 
- 	 * @param params 表单的数据项
 
- 	 * @param caller 处理程序
 
- 	 */
 
- 	static public function form($label, $action, $params = array(),$method='post', $times = 0, $results = '', $caller = __FILE__)
 
- 	{
 
- 		if (false === self::$open || (defined('DEBUG_SHOW_FORM') && !DEBUG_SHOW_FORM))
 
- 		{
 
- 			return ;
 
- 		}
 
- 		$form_html = '<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><title>Debug Form</title></head><body><form action="'.$action.'" method="'.$method.'">';
 
- 		if ($params)
 
- 		{
 
- 			foreach ($params as $k => $v)
 
- 			{
 
- 				$form_html .= $k.': <input type="text" name="'.$k.'" value="'.$v.'" /><br/>';
 
- 			}
 
- 		}
 
- 		$form_html .= '<input type="submit" value="submit" /></form></body></html>';
 
- 		array_push(self::$form_table, array($label, $form_html, $times, $results, $caller));
 
- 	}
 
- 	/**
 
- 	 * @name fb
 
- 	 * @desc 调用FirePHP函数
 
- 	 * @return mixed
 
- 	 * @access public
 
- 	 */
 
- 	static public function fb()
 
- 	{
 
- 		$instance = FirePHP::getInstance(true);
 
- 		$args = func_get_args();
 
- 		return call_user_func_array(array($instance,'fb'),$args);
 
- 	}
 
- 	/**
 
- 	 * @name show
 
- 	 * @desc 显示调试信息
 
- 	 * @todo 目前只实现了在FirePHP中显示结果.需要实现记录LOG日志形式
 
- 	 * @return null
 
- 	 * @access public
 
- 	 */
 
- 	static public function show()
 
- 	{
 
- 		if (!defined('DEBUG_SHOW_LOG') || (defined('DEBUG_SHOW_LOG') && DEBUG_SHOW_LOG))
 
- 		{
 
- 			//用户记录变量
 
- 			self::fb(array('Custom Log Object', self::$log_table), FirePHP::TABLE );
 
- 		}
 
- 		if (!defined('DEBUG_SHOW_TIME') || (defined('DEBUG_SHOW_TIME') && DEBUG_SHOW_TIME))
 
- 		{
 
- 			//页面执行时间
 
- 			self::fb(array('This Page Spend Times ' . self::getTime(), self::$time_table), FirePHP::TABLE );
 
- 		}
 
- 		/*---------记录至日记文件中------------*/
 
- 		/*
 
- 		if(count(self::$log_table) > 1 || count(self::$time_table) > 1)
 
- 		{
 
- 			if(isset($_SERVER['TERM']))
 
- 			{
 
- 				$string = "PWD:" . $_SERVER['PWD'] . "\n";
 
- 				$string .= "SCRIPT_NAME:" . $_SERVER['SCRIPT_NAME'] . "\n";
 
- 				$string .= "ARGV:" . var_export($_SERVER['argv'], true) . "\n";
 
- 			}else
 
- 			{
 
- 				$string = "HTTP_HOST:" . $_SERVER['HTTP_HOST'] . "\n";
 
- 				$string .= "SCRIPT_NAME:" . $_SERVER['SCRIPT_NAME'] . "\n";
 
- 				$string .= "QUERY_STRING:" . $_SERVER['QUERY_STRING'] . "\n";
 
- 			}
 
- 			$string .= 'This Page Spend Times:' . self::getTime() . "\n";
 
- 			array_shift(self::$log_table);
 
- 			array_shift(self::$time_table);
 
- 			if(!empty(self::$time_table))
 
- 			{
 
- 				$string .= "\n";
 
- 				foreach (self::$time_table as $v)
 
- 				{
 
- 					$string .= "|--  ".$v[0]."  ".$v[1]."  ".$v[2]."  --|\n";
 
- 				}
 
- 			}
 
- 			if(!empty(self::$log_table))
 
- 			{
 
- 				$string .= "\n";
 
- 				foreach (self::$log_table as $v)
 
- 				{
 
- 					$string .= "|----  ".$v[0]."  ".$v[2]."  ----|\n";
 
- 					$string .= var_export($v[1], true) . "\n";
 
- 				}
 
- 			}
 
- 			$filename = "debug_" . date("Ymd") . ".log";
 
- 			Log::customLog($filename, $string);
 
- 		}
 
- 		*/
 
- 		//数据库执行时间
 
- 		if(count(self::$db_table) > 0)
 
- 		{
 
- 			$i = 0 ;
 
- 			$db_total_times = 0 ;
 
- 			foreach (self::$db_table as $v)
 
- 			{
 
- 				$db_total_times += $v[2];
 
- 				$i++;
 
- 			}
 
- 			array_unshift(self::$db_table, array('IP', 'Database', 'Time', 'SQL Statement','Results'));
 
- 			self::fb(array($i . ' SQL queries took '.$db_total_times.' seconds', self::$db_table), FirePHP::TABLE );
 
- 		}
 
- 		//Cache执行时间
 
- 		if(count(self::$cache_table) > 0)
 
- 		{
 
- 			$i = 0 ;
 
- 			$cache_total_times = 0 ;
 
- 			foreach (self::$cache_table as $v)
 
- 			{
 
- 				$cache_total_times += $v[2];
 
- 				$i++;
 
- 			}
 
- 			array_unshift(self::$cache_table, array('Server', 'Cache Key', 'Time','Results', 'Method'));
 
- 			self::fb(array($i.' Cache queries took '.$cache_total_times.' seconds', self::$cache_table), FirePHP::TABLE );
 
- 		}
 
- 		//sphinx执行时间
 
- 		if(count(self::$sphinx_table) > 0)
 
- 		{
 
- 			$i = 0 ;
 
- 			$sphinx_total_times = 0 ;
 
- 			foreach (self::$sphinx_table as $v)
 
- 			{
 
- 				$sphinx_total_times += $v[1];
 
- 				$i++;
 
- 			}
 
- 			array_unshift(self::$sphinx_table, array('Condition', 'Time','Results', 'Method'));
 
- 			self::fb(array($i.' Sphinx queries took '.$sphinx_total_times.' seconds', self::$sphinx_table), FirePHP::TABLE );
 
- 		}
 
- 		//Form执行时间
 
- 		if(self::$form_table)
 
- 		{
 
- 			$i = 0;
 
- 			$form_total_times = 0;
 
- 			foreach (self::$form_table as $v)
 
- 			{
 
- 				$form_total_times += $v[2];
 
- 				$i++;
 
- 			}
 
- 			array_unshift(self::$form_table, array('Label', 'FormHtml', 'Times', 'Results', 'Caller'));
 
- 			self::fb(array($i.' Form action request took '.$form_total_times.' seconds', self::$form_table), FirePHP::TABLE );
 
- 		}
 
- 		if (!defined('DEBUG_SHOW_UTILITY') || (defined('DEBUG_SHOW_UTILITY') && DEBUG_SHOW_UTILITY))
 
- 		{
 
- 			//自定义函数
 
- 			$functions = get_defined_functions();
 
- 			//定义的常量
 
- 			$constants = get_defined_constants(true);
 
- 			$sessions = isset($_SESSION) ? $_SESSION : array();
 
- 			self::fb(array('Utility Variables',
 
- 					  array(
 
- 						array('name', 'values'),
 
- 						array('GET Variables', $_GET),
 
- 						array('POST Variables', $_POST),
 
- 						array('Custom Defined Functions', $functions['user']),
 
- 						array('Include Files', get_included_files()),
 
- 						array('Defined Constants', $constants['user']),
 
- 						array('SESSION Variables', $sessions),
 
- 						array('SERVER Variables', $_SERVER),
 
- 						array('appConfigs', Config::all())
 
- 					  )
 
- 			), FirePHP::TABLE );
 
- 		}
 
- 	}
 
- }
 
 
  |