HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vcz/wp-content/plugins/w3-total-cache/Generic_Page_PurgeLog.php
<?php
/**
 * File: Generic_Page_PurgeLog.php
 *
 * @package W3TC
 */

namespace W3TC;

/**
 * Class: Generic_Page_PurgeLog
 *
 * phpcs:disable WordPress.PHP.NoSilencedErrors.Discouraged
 */
class Generic_Page_PurgeLog {
	/**
	 * Plugins regex
	 *
	 * @var string
	 */
	private $plugins_regexp = null;

	/**
	 * Constructor
	 *
	 * @return void
	 */
	public function __construct() {
		$p = dirname( dirname( __FILE__ ) );
		if ( $this->starts_with( $p, ABSPATH ) ) {
			$p = substr( $p, strlen( ABSPATH ) );
		}

		$this->plugins_regexp = '~^(' . Util_Environment::preg_quote( $p ) . '/)([^/]+)(.*)~';
	}

	/**
	 * Render content
	 *
	 * @return void
	 */
	public function render_content() {
		$module       = Util_Request::get_label( 'module' );
		$log_filename = Util_Debug::log_filename( $module . '-purge' );
		if ( file_exists( $log_filename ) ) {
			$log_filefize = $this->to_human( filesize( $log_filename ) );
		} else {
			$log_filefize = 'n/a';
		}

		$lines = Util_DebugPurgeLog_Reader::read( $module );

		$purgelog_modules = array();
		$c                = Dispatcher::config();

		if ( $c->get_boolean( 'pgcache.debug_purge' ) ) {
			$purgelog_modules[] = array(
				'label'   => 'pagecache',
				'name'    => 'Page Cache',
				'postfix' => '',
			);
		}

		if ( $c->get_boolean( 'dbcache.debug_purge' ) ) {
			$purgelog_modules[] = array(
				'label'   => 'dbcache',
				'name'    => 'Database Cache',
				'postfix' => '',
			);
		}

		if ( $c->get_boolean( 'objectcache.debug_purge' ) ) {
			$purgelog_modules[] = array(
				'label'   => 'objectcache',
				'name'    => 'Object Cache',
				'postfix' => '',
			);
		}

		$module_count = count( $purgelog_modules );
		for ( $n = 0; $n < $module_count - 1; $n++ ) {
			$purgelog_modules[ $n ]['postfix'] = '|';
		}

		require __DIR__ . '/Generic_Page_PurgeLog_View.php';
	}

	/**
	 * Converts bytes to human readable
	 *
	 * @param int $bytes    Bytes.
	 * @param int $decimals Decimal places.
	 *
	 * @return string
	 */
	private function to_human( $bytes, $decimals = 2 ) {
		$size   = array( 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB' );
		$factor = floor( ( strlen( $bytes ) - 1 ) / 3 );
		return sprintf( "%.{$decimals}f", $bytes / pow( 1024, $factor ) ) . @$size[ $factor ];
	}

	/**
	 * Checks if string starts with pattern.
	 *
	 * @param string $s      String to check.
	 * @param string $prefix Matching pattern.
	 *
	 * @return bool
	 */
	private function starts_with( $s, $prefix ) {
		return substr( $s, 0, strlen( $prefix ) ) === $prefix;
	}

	/**
	 * Sanitizes filename.
	 *
	 * @param string $filename File name.
	 *
	 * @return string
	 */
	private function esc_filename( $filename ) {
		$m = null;
		if ( preg_match( $this->plugins_regexp, $filename, $m ) ) {
			return esc_html( $m[1] ) .
				'<strong>' . esc_html( $m[2] ) . '</strong>' .
				esc_html( $m[3] );
		}

		return esc_html( $filename );
	}
}