xref: /plugin/siteexport/inc/debug.php (revision 7d101cc131696cb3a0de345d8044a69fb2ef70e9)
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?>