/var/www/html/wp-content/plugins/wp-cerber/admin/

OS : Linux

PHP Version : 7.4.33

Software : Apache/2.4.6 (CentOS) PHP/7.4.33

Information System : Linux apprendre2 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64' . __( 'Export settings to the file', 'wp-cerber' ) . ''; $form .= '

' . __( 'When you click the button below you will get a configuration file, which you can upload on another site.', 'wp-cerber' ) . '

'; $form .= '

' . __( 'What do you want to export?', 'wp-cerber' ) . '

'; $form .= ' '; $form .= '

'; $form .= '

'; $nf = wp_nonce_field( 'crb_import', 'crb_field' ); $form .= '

' . __( 'Import settings from the file', 'wp-cerber' ) . '

'; $form .= '

' . __( 'When you click the button below, file will be uploaded and all existing settings will be overridden.', 'wp-cerber' ) . '

'; $form .= '

' . __( 'Select file to import.', 'wp-cerber' ) . ' ' . sprintf( __( 'Maximum upload file size: %s.' ), esc_html( size_format( wp_max_upload_size() ) ) ); $form .= '

' . $nf; $form .= '

'; $form .= '

' . __( 'What do you want to import?', 'wp-cerber' ) . '

'; $form .= '

'; $form .= '

'; $form .= '

' . __( 'Load the default plugin settings', 'wp-cerber' ) . '

'; $form .= '

' . __( 'When you click the button below, the default WP Cerber settings will be loaded. The Custom login URL and Access Lists will not be changed.', 'wp-cerber' ) . '

'; $form .= '

' . __( 'To get the most out of WP Cerber, follow these steps:', 'wp-cerber' ) . ' Getting Stared Guide

'; $form .= '

'; $form .= '

Bulk load access list entries

'; $form .= '
' . $nf; $form .= '

Load to ' . __( 'White IP Access List', 'wp-cerber' ) . '

'; $form .= '

Load to ' . __( 'Black IP Access List', 'wp-cerber' ) . '

'; $form .= '

'; $form .= '

'; echo $form; } /* Create export file */ function crb_do_export() { global $wpdb; if ( ! cerber_is_http_get() || ! isset( $_GET['cerber_export'] ) ) { return; } if ( ! cerber_user_can_manage() ) { wp_die( 'Error!' ); } $p = cerber_plugin_data(); $data = array( 'cerber_version' => $p['Version'], 'home' => cerber_get_home_url(), 'date' => date( 'd M Y H:i:s' ) ); if ( ! empty( $_GET['exportset'] ) ) { $data ['options'] = crb_get_settings(); $data ['geo-rules'] = cerber_get_geo_rules(); } if ( ! empty( $_GET['exportacl'] ) ) { //$data ['acl'] = cerber_acl_all( 'ip, tag, comments, acl_slice' ); $data ['acl'] = $wpdb->get_results( 'SELECT ip, tag, comments, acl_slice FROM ' . CERBER_ACL_TABLE, ARRAY_N ); } $file = json_encode( $data ); $file .= '==/' . strlen( $file ) . '/' . crc32( $file ) . '/EOF'; crb_file_headers( 'wpcerber.config', 'text/plain' ); echo $file; exit; } /** * Import plugin settings from a file * */ function crb_do_import() { global $wpdb; if ( ! isset( $_POST['cerber_import'] ) || ! cerber_is_http_post() ) { return; } check_admin_referer( 'crb_import', 'crb_field' ); if ( ! cerber_user_can_manage() ) { wp_die( 'Import failed.' ); } // Bulk load ACL if ( isset( $_POST['acl_text'] ) ) { if ( ! ( $text = crb_get_post_fields( 'import_acl_entries' ) ) || ! ( $tag = crb_get_post_fields( 'target_acl', false, 'W|B' ) ) ) { cerber_admin_notice( 'No data provided' ); return; } $text = sanitize_textarea_field( $text ); $list = explode( PHP_EOL, $text ); $count = 0; foreach ( $list as $line ) { if ( ! $line ) { continue; } list( $ip, $comment ) = explode( ',', $line . ',', 3 ); $ip = preg_replace( CRB_IP_NET_RANGE, ' ', $ip ); $ip = preg_replace( '/\s+/', ' ', $ip ); if ( ! $ip ) { continue; } if ( $tag == 'B' ) { if ( ! cerber_can_be_listed( $ip ) ) { cerber_admin_notice( 'Cannot be blacklisted: ' . $ip ); continue; } } $comment = trim( strip_tags( stripslashes( $comment ) ) ); $result = cerber_acl_add( $ip, $tag, $comment ); if ( $result !== true ) { $msg = 'SKIPPED: ' . $ip . ' ' . $comment; if ( crb_is_wp_error( $result ) ) { $msg .= ' - ' . $result->get_error_message(); } cerber_admin_notice( $msg ); } else { $count ++; } } if ( $count ) { $msg = $count . ' access list entries were loaded. Manage access lists.'; } else { $msg = 'No entries were loaded'; } cerber_admin_message( $msg ); return; } // Import from a file $ok = true; if ( ! is_uploaded_file( $_FILES['ifile']['tmp_name'] ) ) { cerber_admin_notice( __( 'No file was uploaded or file is corrupted', 'wp-cerber' ) ); return; } elseif ( $file = file_get_contents( $_FILES['ifile']['tmp_name'] ) ) { $p = strrpos( $file, '==/' ); $data = substr( $file, 0, $p ); $sys = explode( '/', substr( $file, $p ) ); if ( $sys[3] == 'EOF' && crc32( $data ) == $sys[2] && ( $data = json_decode( $data, true ) ) ) { if ( isset( $_POST['importset'] ) && $data['options'] && ! empty( $data['options'] ) && is_array( $data['options'] ) ) { $data['options']['loginpath'] = urldecode( $data['options']['loginpath'] ); // needed for filter cerber_sanitize_m() if ( $data['home'] != cerber_get_home_url() ) { $data['options']['sitekey'] = crb_get_settings( 'sitekey' ); $data['options']['secretkey'] = crb_get_settings( 'secretkey' ); } cerber_save_settings( $data['options'] ); // @since 2.0 if ( isset( $data['geo-rules'] ) ) { update_site_option( CERBER_GEO_RULES, $data['geo-rules'] ); } if ( ! empty( $data['options']['crb_role_policies'] ) ) { update_site_option( CERBER_SETTINGS, array( 'crb_role_policies' => $data['options']['crb_role_policies'] ) ); } } if ( isset( $_POST['importacl'] ) && ! empty( $data['acl'] ) && is_array( $data['acl'] ) ) { $acl_ok = true; if ( false === $wpdb->query( "DELETE FROM " . CERBER_ACL_TABLE ) ) { $acl_ok = false; } foreach ( $data['acl'] as $row ) { if ( ! cerber_acl_add( $row[0], $row[1], crb_array_get( $row, 2, '' ), crb_array_get( $row, 3, 0 ) ) ) { $acl_ok = false; break; } } if ( ! $acl_ok ) { cerber_admin_notice( __( 'A database error occurred while importing access list entries', 'wp-cerber' ) ); } cerber_acl_fixer(); } cerber_upgrade_settings(); // In case it was settings from an older version cerber_admin_message( __( 'Settings has imported successfully from', 'wp-cerber' ) . ' ' . $_FILES['ifile']['name'] ); } else { $ok = false; } } if ( ! $ok ) { cerber_admin_notice( __( 'Error while parsing file', 'wp-cerber' ) ); } } /** * @return void * * @since 8.9.6.3 */ function crb_show_phpinfo() { if ( ! cerber_is_admin_page( array( 'tab' => 'diagnostic', 'cerber-show' => 'php_info' ) ) || ! is_super_admin() ) { return; } phpinfo(); exit(); } /** * Displays admin diagnostic page */ function cerber_show_diag(){ $sections = array(); cerber_cache_enable(); if ( $d = cerber_environment_diag() ) { $sections [] = $d; } ?>
'; echo '

'.$section[0].'

'; echo $section[1]; echo '
'; } ?> Repair Cerber\'s Tables

'; crb_show_diag_section( 'Database Info', cerber_db_diag() . $button ); $server = $_SERVER; if ( ! empty( $server['HTTP_COOKIE'] ) ) { unset( $server['HTTP_COOKIE'] ); } if ( ! empty( $server['HTTP_X_COOKIES'] ) ) { unset( $server['HTTP_X_COOKIES'] ); } ksort( $server ); $se = array(); foreach ( $server as $key => $value ) { if ( is_array( $value ) ) { $se[] = array( $key, cerber_table_view( $key, $value ) ); } else { $se[] = array( $key, @strip_tags( $value ) ); } } crb_show_diag_section( 'Server Environment Variables', cerber_make_plain_table( $se ) ); $buttons = '

Clear Cache Recheck Status

'; crb_show_diag_section( 'Cerber Security Cloud Status', lab_status() . $buttons ); crb_show_diag_section( 'Maintenance Tasks', cerber_cron_diag() ); if ( $report = get_site_option( '_cerber_report' ) ) { $rep = cerber_ago_time( $report[0] ) . ' (' . cerber_date( $report[0] ) . ')'; if ($report[1]) { $rep .= ' OK | '.get_site_transient( 'crb_hourly_2' ); } else { $rep .= ' Unable to send email'; } crb_show_diag_section( 'Weekly Reports', $rep ); } if ( $alerts = get_site_option( CRB_ALERTZ ) ) { $rep = '
    '; foreach ( $alerts as $hash => $alert ) { $al_info = array(); if ( ! empty( $alert[13] ) ) { if ( $alert[13] < time() ) { $al_info [] = 'Expired'; } else { $al_info [] = 'Expires on ' . cerber_date( $alert[13] ); } } if ( ! empty( $alert[11] ) ) { if ( $alert[11] <= $alert[12] ) { $al_info [] = 'Inactive (limit has reached)'; } else { $al_info [] = 'Remains ' . ( $alert[11] - $alert[12] ); } } if ( ! empty( $alert[14] ) ) { $al_info [] = 'Ignore rate limiting'; } if ( ! empty( $alert[15] ) ) { $al_info [] = 'Email'; } if ( ! empty( $alert[16] ) ) { $al_info [] = 'Mobile'; } if ( $al_info = implode( ' | ', $al_info ) ) { $al_info = ' | ' . $al_info; } $rep .= '
  1. ID: ' . $hash . ' ' . $al_info . ' | ' . __( 'Delete', 'wp-cerber' ) . '
  2. '; } $rep .= '
'; $rep .= '

Read more on alerts and notifications

'; crb_show_diag_section( 'Alerts', $rep ); } if ( $status = CRB_DS::get_status() ) { crb_show_diag_section( 'Data Shield Status', '
  • ' . implode( '
  • ', $status ) . '
' ); } crb_show_diag_section( 'WP Cerber Cache', '

Clear

' ); ?>

' . $title . '

' . $content . '
'; } function cerber_show_lic() { $key = lab_get_key(); $valid = ''; $site_ip_row = ''; if ( ! empty( $key[2] ) ) { $lic = $key[2]; if ( lab_validate_lic( $lic, $message, $site_ip ) ) { $valid = '

This key is valid until ' . $message . '

To move the key to another website or web server, please follow these steps: https://my.wpcerber.com/how-to-move-license-key/

'; } else { $message = htmlspecialchars( $message ); $valid = '

This license key is invalid or expired [ i ]

If you believe this key is valid, please follow these steps: https://my.wpcerber.com/how-to-fix-invalid-or-expired-key/

'; } if ( $site_ip ) { $site_ip_row = ' Site IP Address

' . $site_ip . '

'; } } else { $lic = ''; } ?>
License key
Site ID ' . $key[0] . '

'; ?>
' . $tz . '!' : $tz; if ( $c = CRB_Cache::checker() ) { $c = 'Yes | ' . cerber_date( $c ) . ' (' . cerber_ago_time( $c ) . ') '; if ( $stat = CRB_Cache::get_stat( true ) ) { $c .= ' | Cerber\'s entries: ' . count( $stat[1] ); $c .= ' | '.crb_confirmation_link( cerber_admin_link_add( array( 'cerber_admin_do' => 'clear_cache', ) ), 'Clear the cache' ); } } else { $c = 'Not detected'; } if ( $disabled = @ini_get( 'disable_functions' ) ) { $disabled = str_replace( ',', ', ', $disabled ); } $opt = ( is_multisite() ) ? $wpdb->sitemeta : $wpdb->options; $sys = array( array( 'Web Server', $_SERVER['SERVER_SOFTWARE'] ), array( 'PHP version', phpversion() ), //array( 'Server API', php_sapi_name() ), array( 'Server API', PHP_SAPI ), array( 'Server platform', PHP_OS ), array( 'Memory limit', @ini_get( 'memory_limit' ) ), array( 'Default PHP timezone', $tz ), array( 'Disabled PHP functions', $disabled ), array( 'WordPress version', cerber_get_wp_version() ), array( 'WordPress locale', cerber_get_wp_locale() ), array( 'WordPress options DB table', $opt ), array( 'MySQLi', ( function_exists( 'mysqli_connect' ) ) ? 'YES' : 'NO' ), array( 'MySQL Native Driver (mysqlnd)', ( function_exists( 'mysqli_fetch_all' ) ) ? 'YES' : 'NO' ), array( 'PHP allow_url_fopen', ( ini_get( 'allow_url_fopen' ) ) ? 'Enabled' : 'Disabled' ), array( 'PHP allow_url_include', ( ini_get( 'allow_url_include' ) ) ? 'Enabled' : 'Disabled' ), array( 'Persistent object cache', $c ), array( 'Loaded php.ini file', php_ini_loaded_file() ?: 'Unknown' ), array( 'Detailed PHP information', 'View phpinfo()' ), ); if ( 2 < substr_count( cerber_get_site_url(), '/' ) ) { $sys[] = array( 'Subfolder WP installation', 'YES' ); $sys[] = array( 'Site URL', cerber_get_site_url() ); $sys[] = array( 'Home URL', cerber_get_home_url() ); } if ( nexus_is_valid_request() ) { $sys[] = array( 'The IP address of the master is detected as', cerber_get_remote_ip() ); } else { $sys[] = array( 'Your IP address is detected as', cerber_get_remote_ip() . ' (check it on the What Is My IP Address page)' ); } crb_show_diag_section( 'System Info', cerber_make_plain_table( $sys ) ); $folder = cerber_get_my_folder(); if ( crb_is_wp_error( $folder ) ) { $folder = $folder->get_error_message(); } else { $folder .= 'quarantine' . DIRECTORY_SEPARATOR; } if ( file_exists( ABSPATH . 'wp-config.php' )) { $config = ABSPATH . 'wp-config.php'; } elseif ( file_exists( dirname( ABSPATH ) . '/wp-config.php' ) ) { $config = dirname( ABSPATH ) . '/wp-config.php'; } else { $config = 'Error. No config file found.'; } $folders = array( array( 'WordPress root folder (ABSPATH) ', ABSPATH ), array( 'WordPress uploads folder', cerber_get_upload_dir() ), array( 'WordPress content folder', dirname( cerber_get_plugins_dir() ) ), array( 'WordPress plugins folder', cerber_get_plugins_dir() ), array( 'WordPress themes folder', cerber_get_themes_dir() ), array( 'WordPress must-use plugin folder (WPMU_PLUGIN_DIR) ', WPMU_PLUGIN_DIR ), array( 'WordPress config file', $config ), array( 'Server folder for temporary files', sys_get_temp_dir() ), array( 'PHP folder for uploading files', ini_get( 'upload_tmp_dir' ) ), array( 'PHP folder for user session data', session_save_path() ), array( 'WP Cerber\'s quarantine folder', $folder ), array( 'WP Cerber\'s diagnostic log', cerber_get_diag_log() ) ); //$folders[] = array( 'WordPress config file', $config ); if ( file_exists( ABSPATH . '.htaccess' ) ) { $folders[] = array( 'Main .htaccess file', ABSPATH . '.htaccess' ); } foreach ( $folders as &$folder ) { $folder[2] = ''; $folder[3] = ''; if ( @file_exists( $folder[1] ) ) { if ( wp_is_writable( $folder[1] ) ) { $folder[2] = 'Writable'; } else { $folder[2] = 'Write protected'; } $folder[3] = cerber_get_chmod( $folder[1] ); } else { $folder[2] = 'Not found (no access)'; } } $folders[] = array( 'Directory separator', DIRECTORY_SEPARATOR ); crb_show_diag_section( 'File system', cerber_make_plain_table( $folders ) ); if ( is_multisite() ) { $mu = array(); if ( defined( 'UPLOADS' ) ) { $mu[] = array( 'UPLOADS', UPLOADS ); } if ( defined( 'BLOGUPLOADDIR' ) ) { $mu[] = array( 'BLOGUPLOADDIR', BLOGUPLOADDIR ); } if ( defined( 'UPLOADBLOGSDIR' ) ) { $mu[] = array( 'UPLOADBLOGSDIR', UPLOADBLOGSDIR ); } $mu[] = array( 'Uploads folder for sites', cerber_get_upload_dir_mu() ); crb_show_diag_section( 'Multisite Constants', cerber_make_plain_table( $mu ) ); } $pls = array(); $list = get_option('active_plugins'); foreach($list as $plugin) { $data = get_plugin_data(WP_PLUGIN_DIR.'/'.$plugin); $pls[] = array($data['Name'], $data['Version']); } crb_show_diag_section( 'Active Plugins', cerber_make_plain_table( $pls ) ); } function cerber_make_plain_table( $data, $header = null, $first_header = false, $eq = false ) { $class = 'crb-monospace '; if ( $first_header ) { $class .= ' crb-plain-fh '; } if ( ! $eq ) { $class .= ' crb-plain-fcw '; } $ret = '
'; if ( $header ) { $ret .= ''; } foreach ( $data as $row ) { $ret .= ''; } $ret .= '
' . implode( '', $header ) . '
' . implode( '', $row ) . '
'; return $ret; } /* * Create database diagnostic report * * */ function cerber_db_diag(){ global $wpdb; $ret = array(); $db_info = array(); $db_info[] = array( 'Database server', ( $v = cerber_db_get_var( "SELECT VERSION()" ) ) ? $v : 'Unknown' ); $db_info[] = array( 'Database name', DB_NAME ); $var = crb_get_mysql_var( 'innodb_buffer_pool_size' ); $pool_size = round( $var / 1048576 ); $inno = $pool_size . ' MB'; if ( $pool_size < 16 ) { $inno .= ' Your pool size is extremely small!'; } elseif ( $pool_size < 64 ) { $inno .= ' It seems your pool size is too small.'; } $db_info[] = array( 'InnoDB buffer pool size', $inno ); $var = crb_get_mysql_var( 'max_allowed_packet' ); $db_info[] = array( 'Max allowed packet size', round( $var / 1048576 ) . ' MB' ); $db_info[] = array( 'Charset', $wpdb->charset ); $db_info[] = array( 'Collate', $wpdb->collate ); $ret[] = cerber_make_plain_table($db_info); /*$tables_info = array(); foreach ( cerber_get_tables() as $table ) { $tables_info[] = array( $table, $table, 123, 56, 'Details' ); //$ret[] = cerber_table_info( $table ); } $ret[] = cerber_make_plain_table( $tables_info );*/ $ret[] = cerber_table_info( CERBER_LOG_TABLE ); $ret[] = cerber_table_info( CERBER_ACL_TABLE ); $ret[] = cerber_table_info( CERBER_BLOCKS_TABLE ); $ret[] = cerber_table_info( CERBER_TRAF_TABLE ); $err = ''; if ( $errors = get_site_option( '_cerber_db_errors' ) ) { $err = '

Some minor DB errors were detected

'; update_site_option( '_cerber_db_errors', '' ); } return $err . implode( '
', $ret ); } /** * Creates mini report about given database table * * @param $table * * @return string */ function cerber_table_info( $table ) { global $wpdb; if (!cerber_is_table($table)){ return '

ERROR. Database table ' . $table . ' not found! Click repair button below.

'; } $cols = $wpdb->get_results( "SHOW FULL COLUMNS FROM " . $table ); $tb = array(); //$columns = ''; foreach ( $cols as $column ) { $column = obj_to_arr_deep( $column ); $field = array_shift( $column ); $type = array_shift( $column ); $collation = array_shift( $column ); $tb[] = array( $field, $type, $collation ); //$columns .= ''; } //$columns .= '
FieldTypeCollation
' . $field . '' . $type . '' . $collation . '
'; $columns = cerber_make_plain_table( $tb, array( 'Field', 'Type', 'Collation' ) ); $rows = absint( cerber_db_get_var( 'SELECT COUNT(*) FROM ' . $table ) ); $sts = $wpdb->get_row( 'SHOW TABLE STATUS WHERE NAME = "' . $table .'"'); $tb = array(); foreach ( $sts as $key => $value ) { $tb[] = array( $key, $value ); } $status = cerber_make_plain_table( $tb, null, true ); $truncate = ''; if ($rows) { $truncate = ' Delete all rows'; } return '

Table: ' . $table . ', rows: ' . $rows . $truncate. '

' . $columns . ''. $status.'
'; } function cerber_environment_diag() { $issues = array(); if ( version_compare( '7.0', phpversion(), '>' ) ) { $issues[] = 'Your website runs on an outdated (unsupported) version of PHP which is ' . phpversion() . '. We strongly encourage you to upgrade PHP to a newer version. See more at: http://php.net/supported-versions.php'; } if ( ! function_exists( 'http_response_code' ) ) { $issues[] = 'The PHP function http_response_code() is not found or disabled.'; } if ( ! function_exists( 'mb_convert_encoding' ) ) { $issues[] = 'A PHP extension mbstring is not enabled on your website. Some plugin features will not work properly. You need to enable the PHP mbstring extension (multibyte strings support) in your hosting control panel.'; } if ( ! is_numeric( $_SERVER['REQUEST_TIME_FLOAT'] ) ) { $issues[] = 'The server environment variable $_SERVER[\'REQUEST_TIME_FLOAT\'] is not set correctly.'; } if ( cerber_get_remote_ip() === CERBER_NO_REMOTE_IP ) { $issues[] = 'WP Cerber is unable to detect IP addresses correctly. How to fix: Solving problem with incorrect IP address detection'; } $ret = null; if ( $issues ) { $issues = '

' . implode( '

', $issues ) . '

'; $ret = array( '

Some issues have been detected. They can affect plugin functionality.

', $issues ); } return $ret; } function cerber_cron_diag() { $planned = array(); $crb_crons = array( 'cerber_hourly_1' => 'Hourly task #1', 'cerber_hourly_2' => 'Hourly task #2', 'cerber_daily' => 'Daily task', //'cerber_bg_launcher' => 'Background tasks' ); foreach ( _get_cron_array() as $time => $item ) { foreach ( $crb_crons as $key => $val ) { if ( ! empty( $item[ $key ] ) ) { $planned[ $key ] = $val . ' scheduled for ' . cerber_date( $time ) . ' (' . cerber_ago_time( $time ) . ')'; } } } unset( $crb_crons['cerber_daily'] ); $crb_crons['cerber_daily_1'] = 'Daily task'; $errors = array(); $ok = array(); $no_cron = false; foreach ( $crb_crons as $key => $task ) { $h = get_site_transient( $key ); if ( ! $h || ! is_array( $h ) ) { $errors[] = $task . ' has never been executed'; if ( $oldest = cerber_db_get_var( 'SELECT MIN(stamp) FROM ' . CERBER_LOG_TABLE ) ) { if ( $oldest < ( time() - 24 * 3600 ) ) { $no_cron = true; } } continue; } if ( empty( $h[1] ) ) { $errors[] = $task . ' has not finished correctly'; continue; } $end = $h[1]; /* if ( $end < ( time() - 2 * 3600 ) ) { $errors[] = $val . ' has been executed ' . cerber_ago_time( $end ); } else { $ok[] = $val . ' has been executed ' . cerber_ago_time( $end ); } */ $dur = $end - $h[0]; if ( $dur > 60 ) { $errors[] = $task . ' has been executed ' . cerber_ago_time( $end ) . ' and it took ' . $dur . ' seconds.'; } else { $ok[] = $task . ' has been executed ' . cerber_ago_time( $end ) . ' and it took ' . $dur . ' seconds.'; } } $ret = ''; if ( $errors ) { $ret .= '

' . implode( '
', $errors ) . '

'; } if ( $ok ) { $ret .= '

' . implode( '
', $ok ) . '

'; } if ( $planned ) { $ret .= '

' . implode( '
', $planned ) . '

'; } $num = 0; if ( $bg = cerber_bg_task_get_all() ) { $num = count( $bg ); } $ret .= '

Background tasks: ' . $num . '

'; if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) { $ret .= '

Note: the internal WordPress cron launcher is disabled on this site.

'; if ( $no_cron ) { $ret .= '

An external cron launcher has not been configured or does not work properly.

'; } } return $ret; } function cerber_show_diag_log() { $file = cerber_get_diag_log(); if ( ! is_file( $file ) ) { echo '

The log file has not been created yet.

'; return; } if ( ! $fs = filesize( $file ) ) { echo '

The diagnostic log file is empty.

'; return; } $reverse_log = crb_get_query_params( 'reverse_log', '\d' ); $clear = crb_confirmation_link( cerber_admin_link_add( array( 'cerber_admin_do' => 'manage_diag_log', 'do_this' => 'clear_it', ) ), 'Clear the log' ); $dnl = 'Download as a file'; $reverse = 'Reverse the order'; // Log file changes $mtime = cerber_get_date( $file ); $meta = get_user_meta( get_current_user_id(), 'clast_log_view', true ); if ( ! is_array( $meta ) ) { $meta = array(); } $change = $meta['last_change'][ $mtime ] ?? ''; if ( ! $change ) { $bytes = (int) ( $fs - ( $meta['size'] ?? $fs ) ); $change = ( 0 != $bytes ) ? '( ' . sprintf( "%+d", $bytes ) . ' bytes)' : ''; } $lupd = cerber_auto_date( $mtime ) . ' ' . $change; unset( $meta['last_change'] ); // Delete outdated entries $meta['last_change'][ $mtime ] = $change; $meta['size'] = $fs; update_user_meta( get_current_user_id(), 'clast_log_view', $meta ); echo '
Size: ' . number_format( $fs, 0, ' ', ' ' ) . ' bytes  |  Last update: ' . $lupd . '
[ ' . $reverse . '  |  ' . $dnl . '  |  ' . $clear . ' ]
'; if ( empty( $reverse_log ) ) { $log = @fopen( $file, 'r' ); $text = fread( $log, 10000000 ); if ( ! $text ) { return; } fclose( $log ); /*$p = strpos( $text, PHP_EOL ); $text = substr( $text, $p + 1 );*/ echo '
' . nl2br( htmlspecialchars( $text, ENT_SUBSTITUTE ) ) . '
'; } else { $lines = file( $file ); if ( ! $lines ) { return; } echo '
';
		for ( $i = count( $lines ) - 1; $i >= 0; $i -- ) {
			echo htmlspecialchars( $lines[ $i ], ENT_SUBSTITUTE ) . '
'; } echo '
'; } } function cerber_manage_diag_log( $v ) { if ( $v == 'clear_it' ) { cerber_truncate_log( 0 ); } elseif ( $v == 'download' ) { crb_file_headers( 'wpcerber.log', 'text/plain' ); readfile( cerber_get_diag_log() ); exit; } } function cerber_show_change_log() { echo '
'; if ( ! $log = cerber_parse_change_log() ) { echo 'File changelog.txt not found'; } echo implode( '
', $log ); echo '
'; }