$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' );