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