server load. $_SERVER[‘REMOTE_ADDR’] and $_SERVER[‘HTTP_HOST’] [closed]

Debug & Caching

…simply doesn’t work. If you’d load a page (on a cached request) and doing all those funky things like checking if you’re logged in, if you’re using an administrator-role account, etc. than all this would be bypassed by the caching plugin. The cache gets applied to the resulting HTML page, not the PHP code generating it.

(…) would a cache plugin like W3 Total Cache help?

NO, simply said. Extended explanation: It would make it much more worse. You’d cache all data (if the cache gets generated based on your request) and everyone would get the debug dump served. So do yourself a favor and

ALWAYS deactivate caching if you’re debugging on a live server.

How to debug on a live site.

In one of my debug plugins, that I use on live servers, I got the following check on top to abort if none of the criteria is met.

// Nothing to see here
if (
    ! is_admin()
    AND isset( $_GET['debug'] )
    AND 'true' === $_GET['debug']
    AND current_user_can( 'manage_options' )
    AND ( defined( 'DOING_AJAX' ) AND DOING_AJAX )
    AND ( defined( 'DOING_CRON' ) AND DOING_CRON )
)
    return;

So debug output will only be visible if you have the query arg "?debug=true" or "/debug/true" (depending on permalink settings) appended.

You can also write into a log file (but that shouldn’t be done on heavy traffic sites). Here are the lines for a wp-config.php file, that will suppress errors, but write them to your log file.

# DEBUG
define( 'WP_DEBUG',               true );
// file: ~/WP_CONTENT_DIR/debug.log
define( 'WP_DEBUG_LOG',           true );
define( 'WP_DEBUG_DISPLAY',       true );