1*7d101cc1SGerry Weißbach<?php 2*7d101cc1SGerry Weißbach 3*7d101cc1SGerry Weißbachclass siteexport_debug 4*7d101cc1SGerry Weißbach{ 5*7d101cc1SGerry Weißbach private $debug = false; 6*7d101cc1SGerry Weißbach private $firstRE = true; 7*7d101cc1SGerry Weißbach 8*7d101cc1SGerry Weißbach private $debugLevel = 5; 9*7d101cc1SGerry Weißbach private $debugFile = ''; 10*7d101cc1SGerry Weißbach public $isAJAX = false; 11*7d101cc1SGerry Weißbach 12*7d101cc1SGerry Weißbach public $runtimeErrors = ''; 13*7d101cc1SGerry Weißbach 14*7d101cc1SGerry Weißbach /** 15*7d101cc1SGerry Weißbach * Debug Level 16*7d101cc1SGerry Weißbach * the level of what should be logged during the proxied session. 17*7d101cc1SGerry Weißbach * To activate the logging, you have to enter a loglevel below 5 (see below) to log 18*7d101cc1SGerry Weißbach * to the screen. If you use the debugFile option the logstream will be rerouted 19*7d101cc1SGerry Weißbach * to this file. 20*7d101cc1SGerry Weißbach * 21*7d101cc1SGerry Weißbach * Default: 5 / No logging 22*7d101cc1SGerry Weißbach * 23*7d101cc1SGerry Weißbach * Available DEBUG Levels: 24*7d101cc1SGerry Weißbach * 5 = off - only socket exceptions will be shown to avoid blank pages 25*7d101cc1SGerry Weißbach * 4 = ERROR - Log errors of the proxy process 26*7d101cc1SGerry Weißbach * 3 = WARN - Log warnings during the proxy process 27*7d101cc1SGerry Weißbach * 2 = INFO - Log information about the ongoing connection process 28*7d101cc1SGerry Weißbach * 1 = DEBUG - detailed log about variable states 29*7d101cc1SGerry Weißbach * 0 = VERBOSE - Additionally logs the reponse body from the server 30*7d101cc1SGerry Weißbach * 31*7d101cc1SGerry Weißbach * @param $level 32*7d101cc1SGerry Weißbach */ 33*7d101cc1SGerry Weißbach public function setDebugLevel($level = 5) 34*7d101cc1SGerry Weißbach { 35*7d101cc1SGerry Weißbach $this->debugLevel = $level; 36*7d101cc1SGerry Weißbach } 37*7d101cc1SGerry Weißbach 38*7d101cc1SGerry Weißbach public function debugLevel() 39*7d101cc1SGerry Weißbach { 40*7d101cc1SGerry Weißbach return $this->debugLevel; 41*7d101cc1SGerry Weißbach } 42*7d101cc1SGerry Weißbach 43*7d101cc1SGerry Weißbach /** 44*7d101cc1SGerry Weißbach * Set a valid and writeable filename to have the debug information written into a file 45*7d101cc1SGerry Weißbach * Set the debugLevel below 5 to enable the debugging. 46*7d101cc1SGerry Weißbach * 47*7d101cc1SGerry Weißbach * e.g. $CC->debugFile = '/temp/ccproxy.txt'; 48*7d101cc1SGerry Weißbach * e.g. $CC->debugFile = 'C:\temp\ccproxy.txt'; 49*7d101cc1SGerry Weißbach */ 50*7d101cc1SGerry Weißbach public function setDebugFile($file = null) 51*7d101cc1SGerry Weißbach { 52*7d101cc1SGerry Weißbach if ( !$file || empty($file) ) 53*7d101cc1SGerry Weißbach { 54*7d101cc1SGerry Weißbach $file = null; 55*7d101cc1SGerry Weißbach } 56*7d101cc1SGerry Weißbach 57*7d101cc1SGerry Weißbach $this->debugFile = $file; 58*7d101cc1SGerry Weißbach } 59*7d101cc1SGerry Weißbach 60*7d101cc1SGerry Weißbach public function firstRE() 61*7d101cc1SGerry Weißbach { 62*7d101cc1SGerry Weißbach return $this->firstRE; 63*7d101cc1SGerry Weißbach } 64*7d101cc1SGerry Weißbach 65*7d101cc1SGerry Weißbach /** 66*7d101cc1SGerry Weißbach * print debug info to file if exists 67*7d101cc1SGerry Weißbach */ 68*7d101cc1SGerry Weißbach public function message($info,$var=null,$level=4){ 69*7d101cc1SGerry Weißbach 70*7d101cc1SGerry Weißbach $ajaxCanLog = $this->isAJAX && $level == 4; 71*7d101cc1SGerry Weißbach if( $this->debugLevel > $level && !$ajaxCanLog ) return; // only log certain Debug Levels 72*7d101cc1SGerry Weißbach 73*7d101cc1SGerry Weißbach if ( empty($this->debugFile) ) { 74*7d101cc1SGerry 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); 75*7d101cc1SGerry Weißbach $this->debugLevel = 5; // shutdown debug 76*7d101cc1SGerry Weißbach } else { 77*7d101cc1SGerry Weißbach $fh = @fopen($this->debugFile, "a+"); 78*7d101cc1SGerry Weißbach if ( !$fh && !$ajaxCanLog ) { 79*7d101cc1SGerry Weißbach $this->runtimeException("Could not create/open/append logfile: '{$this->debugFile}'", true); 80*7d101cc1SGerry Weißbach $this->debugLevel = 5; // shutdown debug 81*7d101cc1SGerry Weißbach return; 82*7d101cc1SGerry Weißbach } 83*7d101cc1SGerry Weißbach } 84*7d101cc1SGerry Weißbach 85*7d101cc1SGerry Weißbach switch($level) { 86*7d101cc1SGerry Weißbach case 4: $TYPE = "ERROR"; break; 87*7d101cc1SGerry Weißbach case 3: $TYPE = " WARN"; break; 88*7d101cc1SGerry Weißbach case 2: $TYPE = " INFO"; break; 89*7d101cc1SGerry Weißbach case 1: $TYPE = "DEBUG"; break; 90*7d101cc1SGerry Weißbach default: $TYPE = " NONE"; break; 91*7d101cc1SGerry Weißbach } 92*7d101cc1SGerry Weißbach 93*7d101cc1SGerry Weißbach $prepend = "[" . @date('Y-m-d H:i:s') . " $TYPE] "; 94*7d101cc1SGerry Weißbach $log = $prepend . str_replace("\n", "\n" . $prepend . "\t", trim($info)) . "\n"; 95*7d101cc1SGerry Weißbach 96*7d101cc1SGerry Weißbach if ( $fh ) { 97*7d101cc1SGerry Weißbach fwrite($fh, $log); 98*7d101cc1SGerry Weißbach } 99*7d101cc1SGerry Weißbach if ( $ajaxCanLog ) { 100*7d101cc1SGerry Weißbach if ( !headers_sent() ) { 101*7d101cc1SGerry Weißbach header("HTTP/1.0 500 Internal Server Error", true, 500); 102*7d101cc1SGerry Weißbach header("Status: 500 Internal Server Error", true, 500); 103*7d101cc1SGerry Weißbach } 104*7d101cc1SGerry Weißbach echo $log; 105*7d101cc1SGerry Weißbach } 106*7d101cc1SGerry Weißbach 107*7d101cc1SGerry Weißbach if ( !empty($var) ) { 108*7d101cc1SGerry Weißbach 109*7d101cc1SGerry Weißbach if ( is_array($var) ) { 110*7d101cc1SGerry Weißbach ob_start(); 111*7d101cc1SGerry Weißbach print_r($var); 112*7d101cc1SGerry Weißbach $content = ob_get_contents(); 113*7d101cc1SGerry Weißbach ob_end_clean(); 114*7d101cc1SGerry Weißbach } else { 115*7d101cc1SGerry Weißbach $content = $var; 116*7d101cc1SGerry Weißbach } 117*7d101cc1SGerry Weißbach 118*7d101cc1SGerry Weißbach $log = $prepend . "\t" . str_replace("\n", "\n" . $prepend . "\t", str_replace("\r\n", "\n", trim($content))) . "\n"; 119*7d101cc1SGerry Weißbach if ( $fh ) { 120*7d101cc1SGerry Weißbach fwrite($fh, $log); 121*7d101cc1SGerry Weißbach } 122*7d101cc1SGerry Weißbach if ( $ajaxCanLog ) { 123*7d101cc1SGerry Weißbach echo $log; 124*7d101cc1SGerry Weißbach } 125*7d101cc1SGerry Weißbach } 126*7d101cc1SGerry Weißbach 127*7d101cc1SGerry Weißbach if ( $fh ) { 128*7d101cc1SGerry Weißbach fclose($fh); 129*7d101cc1SGerry Weißbach } 130*7d101cc1SGerry Weißbach } 131*7d101cc1SGerry Weißbach 132*7d101cc1SGerry Weißbach function runtimeException($message, $wasDebug=false) { 133*7d101cc1SGerry Weißbach 134*7d101cc1SGerry Weißbach if ( empty($message) ) { return; } 135*7d101cc1SGerry Weißbach if ( !$this->isAJAX ) { 136*7d101cc1SGerry Weißbach ob_start(); 137*7d101cc1SGerry Weißbach } else if ( !headers_sent() ) { 138*7d101cc1SGerry Weißbach header("HTTP/1.0 500 Internal Server Error", true, 500); 139*7d101cc1SGerry Weißbach header("Status: 500 Internal Server Error", true, 500); 140*7d101cc1SGerry Weißbach } 141*7d101cc1SGerry Weißbach 142*7d101cc1SGerry Weißbach if ( $this->firstRE ) { 143*7d101cc1SGerry Weißbach print 'Runtime Error' . "\n"; 144*7d101cc1SGerry Weißbach } 145*7d101cc1SGerry Weißbach 146*7d101cc1SGerry Weißbach if ( !$this->isAJAX ) { 147*7d101cc1SGerry Weißbach print '<b>'.$message.'</b><br />' . "\n"; 148*7d101cc1SGerry Weißbach if ( $this->firstRE ) { 149*7d101cc1SGerry Weißbach print '<b>If this error persists, please contact the server administrator.</b><br />' . "\n"; 150*7d101cc1SGerry Weißbach } 151*7d101cc1SGerry Weißbach } else { 152*7d101cc1SGerry Weißbach if ( !$wasDebug ) { 153*7d101cc1SGerry Weißbach $this->message('Runtime Error: ' . $message, null, 4); 154*7d101cc1SGerry Weißbach } 155*7d101cc1SGerry Weißbach 156*7d101cc1SGerry Weißbach print 'Runtime Error: ' . $message . "\n"; 157*7d101cc1SGerry Weißbach } 158*7d101cc1SGerry Weißbach 159*7d101cc1SGerry Weißbach $this->firstRE = false; 160*7d101cc1SGerry Weißbach 161*7d101cc1SGerry Weißbach if ( !$this->isAJAX ) { 162*7d101cc1SGerry Weißbach $this->runtimeErrors .= ob_get_contents(); 163*7d101cc1SGerry Weißbach ob_end_clean(); 164*7d101cc1SGerry Weißbach } 165*7d101cc1SGerry Weißbach 166*7d101cc1SGerry Weißbach return; 167*7d101cc1SGerry Weißbach } 168*7d101cc1SGerry Weißbach} 169*7d101cc1SGerry Weißbach 170*7d101cc1SGerry Weißbach?>