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