ShowPageTraceBehavior.class.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. // +--------------------------------------------------------------------------
  3. // | Senthot [ DEVELOPED BY ME ]
  4. // +--------------------------------------------------------------------------
  5. // | Copyright (c) 2005-2013 http://www.senthot.com All rights reserved.
  6. // | License ( http://www.apache.org/licenses/LICENSE-2.0 )
  7. // | Author: ms134n ( [email protected] )
  8. // +--------------------------------------------------------------------------
  9. defined('SEN_PATH') or exit();
  10. /**
  11. * System behavior extension : Page Trace display output
  12. * @category Sen
  13. * @package Sen
  14. * @subpackage Behavior
  15. * @author ms134n <[email protected]>
  16. */
  17. class ShowPageTraceBehavior extends Behavior {
  18. // Parameter defines the behavior
  19. protected $options = array(
  20. 'SHOW_PAGE_TRACE' => false, // Trace information display page
  21. 'TRACE_PAGE_TABS' => array('BASE'=>'Basic','FILE'=>'File','INFO'=>'Process','ERR|NOTIC'=>'Error','SQL'=>'SQL','DEBUG'=>'Debugging'), // Trace can be customized page tabs
  22. 'PAGE_TRACE_SAVE' => false,
  23. );
  24. // Behavior extension execution entry must be run
  25. public function run(&$params){
  26. if(!IS_AJAX && C('SHOW_PAGE_TRACE')) {
  27. echo $this->showTrace();
  28. }
  29. }
  30. /**
  31. * Trace information display page
  32. * @access private
  33. */
  34. private function showTrace() {
  35. // The default display information
  36. $files = get_included_files();
  37. $info = array();
  38. foreach ($files as $key=>$file){
  39. $info[] = $file.' ( '.number_format(filesize($file)/1024,2).' KB )';
  40. }
  41. $trace = array();
  42. $base = array(
  43. 'Request information' => date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']).' '.$_SERVER['SERVER_PROTOCOL'].' '.$_SERVER['REQUEST_METHOD'].' : '.__SELF__,
  44. 'Run time' => $this->showTime(),
  45. 'Memory overhead' => MEMORY_LIMIT_ON?number_format((memory_get_usage() - $GLOBALS['_startUseMems'])/1024,2).' kb':'Not Support',
  46. 'Query information' => N('db_query').' queries '.N('db_write').' writes ',
  47. 'File Load' => count(get_included_files()),
  48. 'Cache information' => N('cache_read').' gets '.N('cache_write').' writes ',
  49. 'Configuration is loaded' => count(c()),
  50. 'Session Information' => 'SESSION_ID='.session_id(),
  51. );
  52. // Reading the Trace project definition file
  53. $traceFile = CONF_PATH.'trace.php';
  54. if(is_file($traceFile)) {
  55. $base = array_merge($base,include $traceFile);
  56. }
  57. $debug = trace();
  58. $tabs = C('TRACE_PAGE_TABS');
  59. foreach ($tabs as $name=>$title){
  60. switch(strtoupper($name)) {
  61. case 'BASE':// Basic Information
  62. $trace[$title] = $base;
  63. break;
  64. case 'FILE': // File Information
  65. $trace[$title] = $info;
  66. break;
  67. default:// Debugging information
  68. $name = strtoupper($name);
  69. if(strpos($name,'|')) {// Multiple sets of information
  70. $array = explode('|',$name);
  71. $result = array();
  72. foreach($array as $name){
  73. $result += isset($debug[$name])?$debug[$name]:array();
  74. }
  75. $trace[$title] = $result;
  76. }else{
  77. $trace[$title] = isset($debug[$name])?$debug[$name]:'';
  78. }
  79. }
  80. }
  81. if($save = C('PAGE_TRACE_SAVE')) { // Save Page Trace Logs
  82. if(is_array($save)) {// Select the tab to save
  83. $tabs = C('TRACE_PAGE_TABS');
  84. $array = array();
  85. foreach ($save as $tab){
  86. $array[] = $tabs[$tab];
  87. }
  88. }
  89. $content = date('[ c ]').' '.get_client_ip().' '.$_SERVER['REQUEST_URI']."\r\n";
  90. foreach ($trace as $key=>$val){
  91. if(!isset($array) || in_array($key,$array)) {
  92. $content .= '[ '.$key." ]\r\n";
  93. if(is_array($val)) {
  94. foreach ($val as $k=>$v){
  95. $content .= (!is_numeric($k)?$k.':':'').print_r($v,true)."\r\n";
  96. }
  97. }else{
  98. $content .= print_r($val,true)."\r\n";
  99. }
  100. $content .= "\r\n";
  101. }
  102. }
  103. error_log(str_replace('<br/>',"\r\n",$content), Log::FILE,LOG_PATH.date('y_m_d').'_trace.log');
  104. }
  105. unset($files,$info,$base);
  106. // Call Trace page template
  107. ob_start();
  108. include C('TMPL_TRACE_FILE')?C('TMPL_TRACE_FILE'):SEN_PATH.'Tpl/page_trace.tpl';
  109. return ob_get_clean();
  110. }
  111. /**
  112. * Get running time
  113. */
  114. private function showTime() {
  115. // Show Run Time
  116. G('beginTime',$GLOBALS['_beginTime']);
  117. G('viewEndTime');
  118. // Show Run Time
  119. return G('beginTime','viewEndTime').'s ( Load:'.G('beginTime','loadTime').'s Init:'.G('loadTime','initTime').'s Exec:'.G('initTime','viewStartTime').'s Template:'.G('viewStartTime','viewEndTime').'s )';
  120. }
  121. }