$memory_limit ) { unlink( $debug_log ); clearstatcache(); $debug_log = imsanity_debug_log_path(); touch( $debug_log ); } } if ( filesize( $debug_log ) + strlen( $imsanity_debug_data ) + 4000000 + memory_get_usage( true ) <= $memory_limit && is_writable( $debug_log ) ) { $imsanity_debug_data = str_replace( '
', "\n", $imsanity_debug_data ); file_put_contents( $debug_log, $timestamp . $imsanity_debug_data, FILE_APPEND ); } } $imsanity_debug_data = ''; } /** * Add a message to the debug log (in memory). * * @param string $message A message to send to the debugger. */ function imsanity_debug( $message ) { global $imsanity_debug_data; if ( ! is_string( $message ) && ! is_int( $message ) && ! is_float( $message ) ) { return; } if ( \defined( 'IMSANITY_PHPUNIT' ) && IMSANITY_PHPUNIT ) { if ( ! empty( $_SERVER['argv'] ) && ( \in_array( '--debug', $_SERVER['argv'], true ) || \in_array( '--verbose', $_SERVER['argv'], true ) ) ) { $message = str_replace( '
', "\n", $message ); $message = str_replace( '', '+', $message ); $message = str_replace( '', '+', $message ); echo esc_html( $message ) . "\n"; } } $message = "$message"; if ( defined( 'WP_CLI' ) && WP_CLI ) { WP_CLI::debug( $message ); return; } if ( defined( 'IMSANITY_DEBUG' ) && IMSANITY_DEBUG ) { $memory_limit = imsanity_memory_limit(); // If the message size + 4 MB + current usage exceeds the limit, don't add any more to the debug log. if ( strlen( $message ) + 4000000 + memory_get_usage( true ) > $memory_limit ) { return; } $message = \str_replace( "\n\n\n", '
', $message ); $message = \str_replace( "\n\n", '
', $message ); $message = \str_replace( "\n", '
', $message ); $imsanity_debug_data .= "$message
"; } } /** * View the debug log file from the wp-admin. */ function imsanity_view_debug_log() { check_admin_referer( 'imsanity-options' ); if ( ! current_user_can( 'activate_plugins' ) ) { wp_die( esc_html__( 'Access denied.', 'imsanity' ) ); } $debug_log = imsanity_debug_log_path(); if ( is_file( $debug_log ) ) { header( 'Content-Type: text/plain;charset=UTF-8' ); readfile( $debug_log ); exit; } wp_die( esc_html__( 'The Debug Log is empty.', 'imsanity' ) ); } /** * Removes the debug log file. */ function imsanity_delete_debug_log() { check_admin_referer( 'imsanity-options' ); if ( ! current_user_can( 'activate_plugins' ) ) { wp_die( esc_html__( 'Access denied.', 'imsanity' ) ); } $debug_log = imsanity_debug_log_path(); if ( is_file( $debug_log ) && is_writable( $debug_log ) ) { unlink( $debug_log ); } $sendback = wp_get_referer(); if ( empty( $sendback ) ) { $sendback = imsanity_get_settings_link(); } wp_safe_redirect( $sendback ); exit; } // Flush the debug log on shutdown. add_action( 'shutdown', 'imsanity_debug_log' ); // Non-AJAX handler to view the debug log from the wp-admin. add_action( 'admin_action_imsanity_view_debug_log', 'imsanity_view_debug_log' ); // Non-AJAX handler to delete the debug log, and reroute back to the settings page. add_action( 'admin_action_imsanity_delete_debug_log', 'imsanity_delete_debug_log' );