1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114:
<?php
namespace VSP\Modules;
defined( 'ABSPATH' ) || exit;
use VSP\Base;
class System_Logs extends Base {
protected $current = false;
protected $custom_path = null;
public function read_file( $filepath, $lines = 200, $adaptive = true ) {
$f = @fopen( $filepath, 'rb' );
if ( false === $f ) {
return false;
}
if ( ! $adaptive ) {
$buffer = 4096;
} else {
$buffer = ( $lines < 2 ? 64 : ( $lines < 10 ? 512 : 4096 ) );
}
fseek( $f, -1, SEEK_END );
if ( fread( $f, 1 ) !== "\n" ) {
$lines -= 1;
}
$output = '';
while ( ftell( $f ) > 0 && $lines >= 0 ) {
$seek = min( ftell( $f ), $buffer );
fseek( $f, -$seek, SEEK_CUR );
$chunk = fread( $f, $seek );
$output = $chunk . $output;
fseek( $f, -mb_strlen( $chunk, '8bit' ), SEEK_CUR );
$lines -= substr_count( $chunk, "\n" );
}
while ( $lines++ < 0 ) {
$output = substr( $output, strpos( $output, "\n" ) + 1 );
}
fclose( $f );
return trim( $output );
}
public function render( $custom_path = false ) {
$this->current = ( isset( $_REQUEST['vsp-log-file'] ) ) ? $_REQUEST['vsp-log-file'] : false;
$this->custom_path = $custom_path;
if ( isset( $_REQUEST['delete-handle'] ) && ! empty( $_REQUEST['delete-handle'] ) ) {
$this->remove_log();
}
include( VSP_PATH . 'views/log-viewer.php' );
}
public function remove_log() {
if ( isset( $_REQUEST['delete-handle'] ) && isset( $_REQUEST['_wpnonce'] ) ) {
if ( ! wp_verify_nonce( wp_unslash( $_REQUEST['_wpnonce'] ), 'remove_log' ) ) {
wp_die( esc_html__( 'Action failed. Please refresh the page and retry.', 'vsp-framework' ) );
}
$file = $_REQUEST['delete-handle'];
$ff_regx = '/\.([^.]+)$/';
$ff_types = array( 'log', 'txt' );
if ( preg_match( $ff_regx, $file, $m ) && in_array( $m[1], $ff_types, true ) ) {
$files = vsp_list_log_files();
foreach ( $files as $f ) {
if ( preg_match( $ff_regx, $f, $m2 ) && in_array( $m2[1], $ff_types, true ) ) {
if ( $f === $file && file_exists( VSP_LOG_DIR . $f ) ) {
unlink( VSP_LOG_DIR . $f );
}
}
}
}
wp_safe_redirect( esc_url_raw( remove_query_arg( array( 'delete-handle', '_wpnonce' ) ) ) );
exit();
} else {
wp_die( esc_html__( 'Invalid wpnonce or log file not found!.', 'vsp-framework' ) );
}
}
}