Skip to content

Instantly share code, notes, and snippets.

@chuckreynolds
Forked from jrfnl/wp-config-debug.php
Last active April 12, 2023 07:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save chuckreynolds/b186508690aa45a44826 to your computer and use it in GitHub Desktop.
Save chuckreynolds/b186508690aa45a44826 to your computer and use it in GitHub Desktop.
<?php
/**
* == About this Gist ==
*
* Code to add to wp-config.php to enhance information available for debugging.
*
* You would typically add this code below the database, language and salt settings
*
* Oh.. and *do* make sure you change the path to the log file to a proper file path on your server (make sure it exists).
*
* Set WP_DEBUG to false if you don't want errors displayed on the screen.
* Independently of the WP_DEBUG setting, PHP errors, warnings and notices should now appear in your error.log file.
*
* == DO == test whether it's all working by using the code at the end of the gist.
*
* If error logging is not working, try:
* - Check if the file was created at all, if not, upload an empty (text) file named error.log and try again.
* - Fiddle around with the CHMOD settings for the error.log file to see what permissions are needed for your server setup.
* - If you put the error.log outside of the web root: this will not work in all server setups. You may need to move the directory & file to be within the web root.
*/
/**
* For developers: WordPress debugging mode.
*
* Change this to true to enable the display of notices during development.
* It is strongly recommended that plugin and theme developers use WP_DEBUG
* in their development environments.
*/
define('WP_DEBUG', true);
/**
* Turn on error logging and show errors on-screen if in debugging mode
*/
@error_reporting( E_ALL );
@ini_set('log_errors', true);
@ini_set('log_errors_max_len', '0');
/**
* Change the path to one on your webserver, the directory does not have to be in the web root
* Don't forget to CHMOD this dir+file and add an .htaccess file denying access to all
* For an example .htaccess file, see https://gist.github.com/jrfnl/5953256
*/
@ini_set('error_log', '/path/to/writable/file/logs/error.log');
if ( WP_DEBUG !== true ) {
@ini_set( 'display_errors', false ); // Don't show errors on screen
}
else {
@ini_set( 'display_errors', true ); // Show errors on screen
@ini_set( 'html_errors', true );
@ini_set( 'docref_root', 'http://php.net/manual/' );
@ini_set( 'docref_ext', '.php' );
@ini_set( 'error_prepend_string', '<span style="color: #ff0000; background-color: transparent;">' );
@ini_set( 'error_append_string', '</span>' );
}
/**
* Adds a backtrace to PHP errors
*
* Copied from: https://gist.github.com/625769
* Forked from: http://stackoverflow.com/questions/1159216/how-can-i-get-php-to-produce-a-backtrace-upon-errors/1159235#1159235
* Adjusted by jrfnl
*/
function process_error_backtrace($errno, $errstr, $errfile, $errline) {
if(!(error_reporting() & $errno))
return;
switch($errno) {
case E_WARNING :
case E_USER_WARNING :
case E_STRICT :
case E_NOTICE :
case ( defined( 'E_DEPRECATED' ) ? E_DEPRECATED : 8192 ) :
case E_USER_NOTICE :
$type = 'warning';
$fatal = false;
break;
default :
$type = 'fatal error';
$fatal = true;
break;
}
$trace = debug_backtrace();
array_shift($trace);
if(php_sapi_name() == 'cli' && ini_get('display_errors') ) {
echo 'Backtrace from ' . $type . ' \'' . $errstr . '\' at ' . $errfile . ' ' . $errline . ':' . "\n";
foreach($trace as $item)
echo ' ' . (isset($item['file']) ? $item['file'] : '<unknown file>') . ' ' . (isset($item['line']) ? $item['line'] : '<unknown line>') . ' calling ' . $item['function'] . '()' . "\n";
flush();
} else if( ini_get('display_errors') ) {
echo '<p class="error_backtrace">' . "\n";
echo ' Backtrace from ' . $type . ' \'' . $errstr . '\' at ' . $errfile . ' ' . $errline . ':' . "\n";
echo ' <ol>' . "\n";
foreach($trace as $item)
echo ' <li>' . (isset($item['file']) ? $item['file'] : '<unknown file>') . ' ' . (isset($item['line']) ? $item['line'] : '<unknown line>') . ' calling ' . $item['function'] . '()</li>' . "\n";
echo ' </ol>' . "\n";
echo '</p>' . "\n";
flush();
}
if(ini_get('log_errors')) {
$items = array();
foreach($trace as $item)
$items[] = (isset($item['file']) ? $item['file'] : '<unknown file>') . ' ' . (isset($item['line']) ? $item['line'] : '<unknown line>') . ' calling ' . $item['function'] . '()';
$message = 'Backtrace from ' . $type . ' \'' . $errstr . '\' at ' . $errfile . ' ' . $errline . ': ' . join(' | ', $items);
error_log($message);
}
if($fatal)
exit(1);
}
set_error_handler('process_error_backtrace');
/**
* Now test whether it all works by uncommenting the below line
*
* If all is well:
* - With WP_DEBUG set to true: You should see a red error notice on your screen
* - Independently of the WP_DEBUG setting, the below 'error'-message should have been written to your log file. *Do* check whether it has been....
*/
//trigger_error( 'Testing 1..2..3.. Debugging code is working!', E_USER_NOTICE );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment