17d101cc1SGerry Weißbach<?php 27d101cc1SGerry Weißbach 37d101cc1SGerry Weißbachclass siteexport_debug 47d101cc1SGerry Weißbach{ 57d101cc1SGerry Weißbach private $firstRE = true; 67d101cc1SGerry Weißbach 77d101cc1SGerry Weißbach private $debugLevel = 5; 87d101cc1SGerry Weißbach private $debugFile = ''; 97d101cc1SGerry Weißbach public $isAJAX = false; 107d101cc1SGerry Weißbach 117d101cc1SGerry Weißbach public $runtimeErrors = ''; 127d101cc1SGerry Weißbach 137d101cc1SGerry Weißbach /** 147d101cc1SGerry Weißbach * Debug Level 157d101cc1SGerry Weißbach * the level of what should be logged during the proxied session. 167d101cc1SGerry Weißbach * To activate the logging, you have to enter a loglevel below 5 (see below) to log 177d101cc1SGerry Weißbach * to the screen. If you use the debugFile option the logstream will be rerouted 187d101cc1SGerry Weißbach * to this file. 197d101cc1SGerry Weißbach * 207d101cc1SGerry Weißbach * Default: 5 / No logging 217d101cc1SGerry Weißbach * 227d101cc1SGerry Weißbach * Available DEBUG Levels: 237d101cc1SGerry Weißbach * 5 = off - only socket exceptions will be shown to avoid blank pages 247d101cc1SGerry Weißbach * 4 = ERROR - Log errors of the proxy process 257d101cc1SGerry Weißbach * 3 = WARN - Log warnings during the proxy process 267d101cc1SGerry Weißbach * 2 = INFO - Log information about the ongoing connection process 277d101cc1SGerry Weißbach * 1 = DEBUG - detailed log about variable states 287d101cc1SGerry Weißbach * 0 = VERBOSE - Additionally logs the reponse body from the server 297d101cc1SGerry Weißbach * 307d101cc1SGerry Weißbach * @param $level 317d101cc1SGerry Weißbach */ 327d101cc1SGerry Weißbach public function setDebugLevel($level = 5) 337d101cc1SGerry Weißbach { 347d101cc1SGerry Weißbach $this->debugLevel = $level; 357d101cc1SGerry Weißbach } 367d101cc1SGerry Weißbach 377d101cc1SGerry Weißbach public function debugLevel() 387d101cc1SGerry Weißbach { 397d101cc1SGerry Weißbach return $this->debugLevel; 407d101cc1SGerry Weißbach } 417d101cc1SGerry Weißbach 427d101cc1SGerry Weißbach /** 437d101cc1SGerry Weißbach * Set a valid and writeable filename to have the debug information written into a file 447d101cc1SGerry Weißbach * Set the debugLevel below 5 to enable the debugging. 457d101cc1SGerry Weißbach * 467d101cc1SGerry Weißbach * e.g. $CC->debugFile = '/temp/ccproxy.txt'; 477d101cc1SGerry Weißbach * e.g. $CC->debugFile = 'C:\temp\ccproxy.txt'; 487d101cc1SGerry Weißbach */ 497d101cc1SGerry Weißbach public function setDebugFile($file = null) 507d101cc1SGerry Weißbach { 517d101cc1SGerry Weißbach if (!$file || empty($file)) 527d101cc1SGerry Weißbach { 537d101cc1SGerry Weißbach $file = null; 547d101cc1SGerry Weißbach } 557d101cc1SGerry Weißbach 567d101cc1SGerry Weißbach $this->debugFile = $file; 577d101cc1SGerry Weißbach } 587d101cc1SGerry Weißbach 597d101cc1SGerry Weißbach public function firstRE() 607d101cc1SGerry Weißbach { 617d101cc1SGerry Weißbach return $this->firstRE; 627d101cc1SGerry Weißbach } 637d101cc1SGerry Weißbach 647d101cc1SGerry Weißbach /** 657d101cc1SGerry Weißbach * print debug info to file if exists 667d101cc1SGerry Weißbach */ 677d101cc1SGerry Weißbach public function message($info,$var=null,$level=4){ 687d101cc1SGerry Weißbach 697d101cc1SGerry Weißbach $ajaxCanLog = $this->isAJAX && $level == 4; 70*a8c17ab5Si-net /// software $fh = false; 71*a8c17ab5Si-net /// software 727d101cc1SGerry Weißbach if( $this->debugLevel > $level && !$ajaxCanLog ) return; // only log certain Debug Levels 737d101cc1SGerry Weißbach 747d101cc1SGerry Weißbach if ( empty($this->debugFile) ) { 757d101cc1SGerry Weißbach $this->runtimeException("DebugFile not properly configured. Make sure, it is set, readable and writable. We suggest to use a file in the DokuWiki's media directory.", true); 767d101cc1SGerry Weißbach $this->debugLevel = 5; // shutdown debug 777d101cc1SGerry Weißbach } else { 787d101cc1SGerry Weißbach $fh = @fopen($this->debugFile, "a+"); 797d101cc1SGerry Weißbach if ( !$fh && !$ajaxCanLog ) { 807d101cc1SGerry Weißbach $this->runtimeException("Could not create/open/append logfile: '{$this->debugFile}'", true); 817d101cc1SGerry Weißbach $this->debugLevel = 5; // shutdown debug 827d101cc1SGerry Weißbach return; 837d101cc1SGerry Weißbach } 847d101cc1SGerry Weißbach } 857d101cc1SGerry Weißbach 867d101cc1SGerry Weißbach switch($level) { 877d101cc1SGerry Weißbach case 4: $TYPE = "ERROR"; break; 887d101cc1SGerry Weißbach case 3: $TYPE = " WARN"; break; 897d101cc1SGerry Weißbach case 2: $TYPE = " INFO"; break; 907d101cc1SGerry Weißbach case 1: $TYPE = "DEBUG"; break; 917d101cc1SGerry Weißbach default: $TYPE = " NONE"; break; 927d101cc1SGerry Weißbach } 937d101cc1SGerry Weißbach 94*a8c17ab5Si-net /// software $prepend = "[" . (date('Y-m-d H:i:s') ?: "") . " $TYPE] "; 957d101cc1SGerry Weißbach $log = $prepend . str_replace("\n", "\n" . $prepend . "\t", trim($info)) . "\n"; 967d101cc1SGerry Weißbach 97*a8c17ab5Si-net /// software if ( $fh !== false ) { 987d101cc1SGerry Weißbach fwrite($fh, $log); 997d101cc1SGerry Weißbach } 1007d101cc1SGerry Weißbach if ( $ajaxCanLog ) { 1017d101cc1SGerry Weißbach if ( !headers_sent() ) { 1027d101cc1SGerry Weißbach header("HTTP/1.0 500 Internal Server Error", true, 500); 1037d101cc1SGerry Weißbach header("Status: 500 Internal Server Error", true, 500); 1047d101cc1SGerry Weißbach } 1057d101cc1SGerry Weißbach echo $log; 1067d101cc1SGerry Weißbach } 1077d101cc1SGerry Weißbach 1087d101cc1SGerry Weißbach if ( !empty($var) ) { 1097d101cc1SGerry Weißbach 1107d101cc1SGerry Weißbach if ( is_array($var) ) { 1117d101cc1SGerry Weißbach ob_start(); 1127d101cc1SGerry Weißbach print_r($var); 1137d101cc1SGerry Weißbach $content = ob_get_contents(); 1147d101cc1SGerry Weißbach ob_end_clean(); 1157d101cc1SGerry Weißbach } else { 1167d101cc1SGerry Weißbach $content = $var; 1177d101cc1SGerry Weißbach } 1187d101cc1SGerry Weißbach 1197d101cc1SGerry Weißbach $log = $prepend . "\t" . str_replace("\n", "\n" . $prepend . "\t", str_replace("\r\n", "\n", trim($content))) . "\n"; 1207d101cc1SGerry Weißbach if ( $fh ) { 1217d101cc1SGerry Weißbach fwrite($fh, $log); 1227d101cc1SGerry Weißbach } 1237d101cc1SGerry Weißbach if ( $ajaxCanLog ) { 1247d101cc1SGerry Weißbach echo $log; 1257d101cc1SGerry Weißbach } 1267d101cc1SGerry Weißbach } 1277d101cc1SGerry Weißbach 1287d101cc1SGerry Weißbach if ( $fh ) { 1297d101cc1SGerry Weißbach fclose($fh); 1307d101cc1SGerry Weißbach } 1317d101cc1SGerry Weißbach } 1327d101cc1SGerry Weißbach 133*a8c17ab5Si-net /// software public function runtimeException($message, $wasDebug=false) { 1347d101cc1SGerry Weißbach 1357d101cc1SGerry Weißbach if ( empty($message) ) { return; } 1362270cdc5SGerry Weißbach 1377d101cc1SGerry Weißbach if ( !$this->isAJAX ) { 1387d101cc1SGerry Weißbach ob_start(); 1397d101cc1SGerry Weißbach } else if ( !headers_sent() ) { 1407d101cc1SGerry Weißbach header("HTTP/1.0 500 Internal Server Error", true, 500); 1417d101cc1SGerry Weißbach header("Status: 500 Internal Server Error", true, 500); 1427d101cc1SGerry Weißbach } 1437d101cc1SGerry Weißbach 1446553d16bSGerry Weißbach if ( !$this->isAJAX ) { 1457d101cc1SGerry Weißbach if ( $this->firstRE ) { 1467d101cc1SGerry Weißbach print 'Runtime Error' . "\n"; 1477d101cc1SGerry Weißbach } 1487d101cc1SGerry Weißbach 1497d101cc1SGerry Weißbach print '<b>'.$message.'</b><br />' . "\n"; 1507d101cc1SGerry Weißbach if ( $this->firstRE ) { 1517d101cc1SGerry Weißbach print '<b>If this error persists, please contact the server administrator.</b><br />' . "\n"; 1527d101cc1SGerry Weißbach } 1537d101cc1SGerry Weißbach } else { 1547d101cc1SGerry Weißbach if ( !$wasDebug ) { 1557d101cc1SGerry Weißbach $this->message('Runtime Error: ' . $message, null, 4); 1566553d16bSGerry Weißbach } else { 1577d101cc1SGerry Weißbach print 'Runtime Error: ' . $message . "\n"; 1587d101cc1SGerry Weißbach } 1596553d16bSGerry Weißbach } 1607d101cc1SGerry Weißbach 1617d101cc1SGerry Weißbach $this->firstRE = false; 1627d101cc1SGerry Weißbach 1637d101cc1SGerry Weißbach if (!$this->isAJAX) { 1647d101cc1SGerry Weißbach $this->runtimeErrors .= ob_get_contents(); 1657d101cc1SGerry Weißbach ob_end_clean(); 1667d101cc1SGerry Weißbach } 1677d101cc1SGerry Weißbach 1687d101cc1SGerry Weißbach return; 1697d101cc1SGerry Weißbach } 1707d101cc1SGerry Weißbach} 171