WordPress.org

Make WordPress Core

Ticket #11316: wp-config-my-error-configuration.php

File wp-config-my-error-configuration.php, 2.2 KB (added by hakre, 4 years ago)

Own Error Handler and Error Configuration Class to drop into wp-config.php

Line 
1<?php 
2
3/* ... wp-config here */
4
5// Error configuration
6class MyErrorConfiguration {
7        private $_logifle = '';
8
9        public function __construct() { 
10
11                // prepare logfile
12                $logfile = dirname(__FILE__) . '/wp-content/log/phperror.log';
13                $this->_logfile = $logfile;
14                if ( !file_exists($logfile) ) touch($logfile);
15                chmod($logfile,  0777);
16
17                // set error reporting
18                $r = ini_set('display_errors', false);         
19                $r = error_reporting( (E_ALL) ); # // E_ALL | E_STRICT
20                $r = ini_set('error_log', $logfile);   
21                $r = ini_set('log_errors', true);
22
23                set_error_handler(array($this, 'handleNotice'), E_NOTICE | E_USER_NOTICE);
24        }
25
26        private function _traceSimple(array $trace)
27        {
28
29                $lines = array();
30
31                $count = 0;
32                foreach($trace as $part)
33                {
34                        if ( !isset($part['class']) ) $part['class'] = '';
35                        if ( !isset($part['type']) ) $part['class'] = '';
36
37                        $line = sprintf('#%d %s%s%s() in %s line %d', $count, $part['class'], $part['type'], $part['function'],  $part['file'], $part['line']);
38                        $lines[] = $line;
39                        $count++;
40                }
41
42                $buffer = implode("\n", $lines);
43
44                if ( strlen($buffer) ) $buffer .= "\n";
45
46                return ;
47        }
48
49        private function _getBacktrace() {
50                $trace  = debug_backtrace(false);
51                array_shift($trace);
52                array_shift($trace);
53                $buffer = $this->_traceSimple($trace);                                                         
54                return $buffer;
55        }
56
57        private function _translateErrno($errno)
58        {
59                switch($errno)
60                {
61                        case E_NOTICE:
62                                $text = 'PHP Notice';
63                                break;
64                        case E_USER_NOTICE:
65                                $text = 'PHP User Notice';
66                                break;
67                        default:
68                                $text = sprintf('PHP Error-Code #%d', $errno);
69                }
70                return $text;
71        }
72
73        public function handleNotice($errno, $errstr, $errfile, $errline) {
74                $logfile = $this->_logfile;
75                if ( $fh = fopen($this->_logfile, 'a') )
76                {
77                        $message = sprintf('[%s] %s: %s in %s line %s', date('d-M-Y H:i:s'), $this->_translateErrno($errno), $errstr, $errfile, $errline);
78                        fwrite($fh, $message . "\n");
79                        fwrite($fh, $this->_getBacktrace());
80                        fclose($fh);
81                } else {
82                        die('Unable to handle notice.');
83          }
84        }
85}
86
87$MyErrorConfiguration = new MyErrorConfiguration();
88
89/* wp-config there ... */
90
91if ( !defined('ABSPATH') )
92{
93        define('ABSPATH', dirname(__FILE__).'/');
94}
95
96require_once(ABSPATH.'wp-settings.php');
97
98?>