Leitgedanken/msd2/wordpress/wp-content/plugins/cachify/inc/cachify_memcached.class.php
2023-01-23 11:03:31 +01:00

306 lines
4.8 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/* Quit */
defined('ABSPATH') OR exit;
/**
* Cachify_MEMCACHED
*/
final class Cachify_MEMCACHED {
/**
* Memcached-Object
*
* @since 2.0.7
* @var object
*/
private static $_memcached;
/**
* Availability check
*
* @since 2.0.7
* @change 2.0.7
*
* @return boolean true/false TRUE when installed
*/
public static function is_available()
{
return class_exists('Memcached') && isset($_SERVER['SERVER_SOFTWARE']) && strpos(strtolower($_SERVER['SERVER_SOFTWARE']), 'nginx') !== false;
}
/**
* Caching method as string
*
* @since 2.1.2
* @change 2.1.2
*
* @return string Caching method
*/
public static function stringify_method() {
return 'Memcached';
}
/**
* Speicherung im Cache
*
* @since 2.0.7
* @change 2.0.7
*
* @param string $hash Hash des Eintrags
* @param string $data Inhalt des Eintrags
* @param integer $lifetime Lebensdauer des Eintrags
*/
public static function store_item($hash, $data, $lifetime)
{
/* Empty? */
if ( empty($data) ) {
wp_die('MEMCACHE add item: Empty input.');
}
/* Server connect */
if ( ! self::_connect_server() ) {
return;
}
/* Add item */
self::$_memcached->set(
self::_file_path(),
$data . self::_cache_signatur(),
$lifetime
);
}
/**
* Lesen aus dem Cache
*
* @since 2.0.7
* @change 2.0.7
*
* @param string $hash Hash des Eintrags
* @return mixed $diff Wert des Eintrags
*/
public static function get_item($hash)
{
/* Server connect */
if ( ! self::_connect_server() ) {
return;
}
/* Get item */
return self::$_memcached->get(
self::_file_path()
);
}
/**
* Entfernung aus dem Cache
*
* @since 2.0.7
* @change 2.0.7
*
* @param string $hash Hash des Eintrags
* @param string $url URL des Eintrags [optional]
*/
public static function delete_item($hash, $url = '')
{
/* Server connect */
if ( ! self::_connect_server() ) {
return;
}
/* Delete */
self::$_memcached->delete(
self::_file_path($url)
);
}
/**
* Leerung des Cache
*
* @since 2.0.7
* @change 2.0.7
*/
public static function clear_cache()
{
/* Server connect */
if ( ! self::_connect_server() ) {
return;
}
/* Flush */
@self::$_memcached->flush();
}
/**
* Ausgabe des Cache
*
* @since 2.0.7
* @change 2.0.7
*/
public static function print_cache()
{
return;
}
/**
* Ermittlung der Cache-Größe
*
* @since 2.0.7
* @change 2.0.7
*
* @return mixed $diff Cache-Größe
*/
public static function get_stats()
{
/* Server connect */
if ( ! self::_connect_server() ) {
wp_die('MEMCACHE: Not enabled.');
}
/* Infos */
$data = self::$_memcached->getStats();
/* No stats? */
if ( empty($data) ) {
return NULL;
}
/* Get first key */
$data = $data[key($data)];
/* Leer */
if ( empty($data['bytes']) ) {
return NULL;
}
return $data['bytes'];
}
/**
* Generierung der Signatur
*
* @since 2.0.7
* @change 2.0.7
*
* @return string $diff Signatur als String
*/
private static function _cache_signatur()
{
return sprintf(
"\n\n<!-- %s\n%s @ %s -->",
'Cachify | http://cachify.de',
'Memcached',
date_i18n(
'd.m.Y H:i:s',
current_time('timestamp')
)
);
}
/**
* Pfad der Cache-Datei
*
* @since 2.0.7
* @change 2.0.7
*
* @param string $path Request-URI oder Permalink [optional]
* @return string $diff Pfad zur Cache-Datei
*/
private static function _file_path($path = NULL)
{
return trailingslashit(
sprintf(
'%s%s',
$_SERVER['HTTP_HOST'],
parse_url(
( $path ? $path : $_SERVER['REQUEST_URI'] ),
PHP_URL_PATH
)
)
);
}
/**
* Connect to Memcached server
*
* @since 2.0.7
* @change 2.1.8
*
* @hook array cachify_memcached_servers Array with memcached servers
*
* @return boolean true/false TRUE bei Erfolg
*/
private static function _connect_server()
{
/* Not enabled? */
if ( ! self::is_available() ) {
return false;
}
/* Already connected */
if ( is_object(self::$_memcached) ) {
return true;
}
/* Init */
self::$_memcached = new Memcached();
/* Set options */
if ( defined('HHVM_VERSION') ) {
self::$_memcached->setOption( Memcached::OPT_COMPRESSION, false );
self::$_memcached->setOption( Memcached::OPT_BUFFER_WRITES, true );
self::$_memcached->setOption( Memcached::OPT_BINARY_PROTOCOL, true );
} else {
self::$_memcached->setOptions(
array(
Memcached::OPT_COMPRESSION => false,
Memcached::OPT_BUFFER_WRITES => true,
Memcached::OPT_BINARY_PROTOCOL => true
)
);
}
/* Connect */
self::$_memcached->addServers(
(array)apply_filters(
'cachify_memcached_servers',
array(
array(
'127.0.0.1',
11211
)
)
)
);
return true;
}
}