| Server IP : 208.122.213.31 / Your IP : 216.73.216.45 Web Server : Apache System : Linux msd6191.mjhst.com 4.18.0-553.137.1.el8_10.x86_64 #1 SMP Wed Jun 24 11:40:24 UTC 2026 x86_64 User : WHMCS_MIA_382 ( 1001) PHP Version : 7.4.33 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/httpd/html/baberankings.com/wp-content/plugins/w3-total-cache/ |
Upload File : |
<?php
/**
* File: Cache_Memcached_Stats.php
*
* @package W3TC
*/
namespace W3TC;
/**
* Class Cache_Memcached_Stats
*
* Download extended statistics since module cant do it by itself
*
* phpcs:disable WordPress.PHP.NoSilencedErrors.Discouraged
* phpcs:disable WordPress.WP.AlternativeFunctions
*/
class Cache_Memcached_Stats {
/**
* Constructor to initialize the Memcached stats handler.
*
* @param string $host The hostname or IP address of the Memcached server.
* @param int $port The port number of the Memcached server.
*
* @return void
*/
public function __construct( $host, $port ) {
$this->host = $host;
$this->port = $port;
}
/**
* Sends a command to the Memcached server and retrieves the response.
*
* @param string $command The command to send to the Memcached server.
*
* @return array|null An array of response lines from the server, or null on failure.
*/
public function request( $command ) {
$handle = @fsockopen( $this->host, $this->port );
if ( ! $handle ) {
return null;
}
fwrite( $handle, $command . "\r\n" );
$response = array();
while ( ( ! feof( $handle ) ) ) {
$w3tc_line = fgets( $handle );
$response[] = $w3tc_line;
if ( $this->end( $w3tc_line, $command ) ) {
break;
}
}
@fclose( $handle );
return $response;
}
/**
* Determines if the server response indicates the end of a command's execution.
*
* @param string $buffer The current line of the server's response.
* @param string $command The command that was sent to the server.
*
* @return bool True if the response indicates the end of the command, false otherwise.
*/
private function end( $buffer, $command ) {
// incr or decr also return integer.
if ( ( preg_match( '/^(incr|decr)/', $command ) ) ) {
if ( preg_match( '/^(END|ERROR|SERVER_ERROR|CLIENT_ERROR|NOT_FOUND|[0-9]*)/', $buffer ) ) {
return true;
}
} elseif ( preg_match( '/^(END|DELETED|OK|ERROR|SERVER_ERROR|CLIENT_ERROR|NOT_FOUND|STORED|RESET|TOUCHED)/', $buffer ) ) {
return true;
}
return false;
}
/**
* Parses the response lines into an array of data.
*
* @param array $lines An array of response lines from the Memcached server.
*
* @return array A parsed array where each line is split into words.
*/
public function parse( $lines ) {
$return = array();
foreach ( $lines as $w3tc_line ) {
$w3tc_data = explode( ' ', $w3tc_line );
$return[] = $w3tc_data;
}
return $return;
}
/**
* Retrieves the IDs of all active slabs on the Memcached server.
*
* A slab is a logical unit of storage in Memcached.
*
* @return array|null An array of slab IDs, or null on failure.
*/
public function slabs() {
$w3tc_result = $this->request( 'stats slabs' );
if ( is_null( $w3tc_result ) ) {
return null;
}
$w3tc_result = $this->parse( $w3tc_result );
$slabs = array();
foreach ( $w3tc_result as $line_words ) {
if ( count( $line_words ) < 2 ) {
continue;
}
$w3tc_key = explode( ':', $line_words[1] );
if ( (int) $w3tc_key[0] > 0 ) {
$slabs[ $w3tc_key[0] ] = '*';
}
}
return array_keys( $slabs );
}
/**
* Retrieves a cachedump for a specific slab ID.
*
* A cachedump returns the cached items for the specified slab.
*
* @param int $slab_id The ID of the slab to retrieve the cachedump for.
*
* @return array|null An array of cachedump data, or null on failure.
*/
public function cachedump( $slab_id ) {
$w3tc_result = $this->request( 'stats cachedump ' . $slab_id . ' 0' );
if ( is_null( $w3tc_result ) ) {
return null;
}
// return pure data to limit memory usage.
return $w3tc_result;
}
}