memcached php
¿Cómo comprobar si Memcache o Memcached está instalado para PHP? (9)
¿Cómo memcache si memcache o memcached (para PHP) está instalado en mi servidor web Apache?
Memcache es un daemon de caché diseñado especialmente para aplicaciones web dinámicas para disminuir la carga de la base de datos al almacenar objetos en la memoria.
¿por qué no utilizar la función extension_loaded() ?
El mejor enfoque en este caso es usar extension_loaded () o function_exists () son igual de rápidos.
Puedes ver evidencia aquí:
https://github.com/dragoonis/ppi-framework/blob/master/Cache/Memcached.php#L140
Tenga en cuenta que algunas extensiones de PHP como APC tienen configuraciones de php.ini que pueden deshabilitarlas aunque la extensión se pueda cargar. Aquí hay un ejemplo de cómo verificar eso también:
https://github.com/dragoonis/ppi-framework/blob/master/Cache/Apc.php#L79
Espero que esto ayude.
Puede ser relevante para ver si se está ejecutando en PHP a través de línea de comandos también-
<path-to-php-binary>php -i | grep memcache
Sé que este es un hilo viejo, pero hay otra forma que he encontrado útil para cualquier extensión.
correr
php -m | grep <module_name>
En este caso particular:
php -m | grep memcache
Si desea enumerar todos los módulos PHP, entonces:
php -m
Dependiendo de su sistema, obtendría un resultado similar a este:
[PHP Modules]
apc
bcmath
bz2
... lots of other modules ...
mbstring
memcache
... and still more modules ...
zip
zlib
[Zend Modules]
Puedes ver que Memcache está en esta lista.
Tenga en cuenta que todas las class_exists
, extensions_loaded
y function_exists
solo verifican el vínculo entre PHP
y el paquete de memcache
.
Para comprobar realmente si Memcache está instalado, debe hacer lo siguiente:
- conocer la plataforma del sistema operativo y usar comandos del shell para verificar si el paquete de Memcache está instalado
- o prueba si se puede establecer la conexión de Memcache en el puerto esperado
EDIT 2 : OK, de hecho aquí hay una solución completa más fácil:
if (class_exists(''Memcache'')) {
$memcache = new Memcache;
$isMemcacheAvailable = @$memcache->connect(''localhost'');
}
if ($isMemcacheAvailable) {
//...
}
Código obsoleto a continuación
EDITAR : En realidad, debes forzar a PHP a que emita un error en las advertencias primero. Eche un vistazo a esta respuesta a la pregunta SO .
Luego puede probar la conexión a través de:
try {
$memcache->connect(''localhost'');
} catch (Exception $e) {
// well it''s not here
}
Tienes varias opciones;)
$memcache_enabled = class_exists(''Memcache'');
$memcache_enabled = extension_loaded(''memcache'');
$memcache_enabled = function_exists(''memcache_connect'');
Use este código para verificar no solo si la extensión de memcache está habilitada, sino también si el daemon se está ejecutando y puede almacenar y recuperar datos con éxito:
<?php
if (class_exists(''Memcache'')) {
$server = ''localhost'';
if (!empty($_REQUEST[''server''])) {
$server = $_REQUEST[''server''];
}
$memcache = new Memcache;
$isMemcacheAvailable = @$memcache->connect($server);
if ($isMemcacheAvailable) {
$aData = $memcache->get(''data'');
echo ''<pre>'';
if ($aData) {
echo ''<h2>Data from Cache:</h2>'';
print_r($aData);
} else {
$aData = array(
''me'' => ''you'',
''us'' => ''them'',
);
echo ''<h2>Fresh Data:</h2>'';
print_r($aData);
$memcache->set(''data'', $aData, 0, 300);
}
$aData = $memcache->get(''data'');
if ($aData) {
echo ''<h3>Memcache seem to be working fine!</h3>'';
} else {
echo ''<h3>Memcache DOES NOT seem to be working!</h3>'';
}
echo ''</pre>'';
}
}
if (!$isMemcacheAvailable) {
echo ''Memcache not available'';
}
?>
esta es mi función de prueba que uso para verificar Memcache en el servidor
<?php
public function test()
{
// memcache test - make sure you have memcache extension installed and the deamon is up and running
$memcache = new Memcache;
$memcache->connect(''localhost'', 11211) or die ("Could not connect");
$version = $memcache->getVersion();
echo "Server''s version: ".$version."<br/>/n";
$tmp_object = new stdClass;
$tmp_object->str_attr = ''test'';
$tmp_object->int_attr = 123;
$memcache->set(''key'', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)<br/>/n";
$get_result = $memcache->get(''key'');
echo "Data from the cache:<br/>/n";
var_dump($get_result);
}
si ves algo como esto
Server''s version: 1.4.5_4_gaa7839e
Store data in the cache (data will expire in 10 seconds)
Data from the cache:
object(stdClass)#3 (2) { ["str_attr"]=> string(4) "test" ["int_attr"]=> int(123) }
significa que todo está bien
¡Aclamaciones!
Puede mirar phpinfo () o verificar si alguna de las funciones de Memcache está disponible. En última instancia, compruebe si la clase Memcache
existe o no.
p.ej
if(class_exists(''Memcache'')){
// Memcache is enabled.
}