web-dev-qa-db-fra.com

Comment vérifier si memcache ou memcached est installé pour PHP?

Comment puis-je tester si memcache ou memcached (pour PHP) est installé sur mon serveur Web Apache?

Memcache est un démon de mise en cache conçu spécialement pour les applications Web dynamiques pour réduire la charge de la base de données en stockant des objets en mémoire.

46
Robinicks

Vous pouvez regarder phpinfo () ou vérifier si l'une des fonctions de memcache est disponible. Enfin, vérifiez si la classe Memcache existe ou non.

par exemple.

if(class_exists('Memcache')){
  // Memcache is enabled.
}
48
mauris

Utilisez ce code pour non seulement vérifier si l'extension memcache est activée, mais aussi si le démon est en cours d'exécution et capable de stocker et de récupérer des données avec succès:

<?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';
}

?>
25
Bijay Rungta

pourquoi ne pas utiliser la fonction extension_loaded () ?

25
J.C. Inacio

Je sais que c'est un vieux fil, mais il y a une autre façon que j'ai trouvée utile pour n'importe quelle extension.

Courir

php -m | grep <module_name>

Dans ce cas particulier:

php -m | grep memcache

Si vous voulez lister tous les modules PHP alors:

php -m

Selon votre système, vous obtiendrez une sortie similaire à celle-ci:

[PHP Modules]
apc
bcmath
bz2
... lots of other modules ...
mbstring
memcache
 ... and still more modules ...
Zip
zlib

[Zend Modules]

Vous pouvez voir que memcache est dans cette liste.

20
hlasso

Notez que tous les class_exists, extensions_loaded, et function_exists uniquement vérifiez le lien entre PHP et le package memcache.

Pour vérifier si memcache est installé, vous devez soit:

  • connaître la plate-forme du système d'exploitation et utiliser les commandes Shell pour vérifier si le package memcache est installé
  • ou tester si la connexion memcache peut être établie sur le port attendu

EDIT 2 : OK, en fait, voici une solution complète plus simple:

if (class_exists('Memcache')) {
    $memcache = new Memcache;
    $isMemcacheAvailable = @$memcache->connect('localhost');
}
if ($isMemcacheAvailable) {
    //...
}

Code obsolète ci-dessous


[~ # ~] modifier [~ # ~] : En fait, vous devez forcer PHP pour lancer une erreur sur les avertissements d'abord Jetez un oeil à cette SO question réponse.

Vous pouvez ensuite tester la connexion via:

try {
    $memcache->connect('localhost');
} catch (Exception $e) {
    // well it's not here
}
10
antitoxic

Vous avez plusieurs options;)

$memcache_enabled = class_exists('Memcache');
$memcache_enabled = extension_loaded('memcache');
$memcache_enabled = function_exists('memcache_connect');
9
mgutt

Il peut être pertinent de voir s'il fonctionne aussi en PHP via la ligne de commande également-

<path-to-php-binary>php -i | grep memcache
7
danno

J'ai combiné, minifié et étendu (quelques vérifications supplémentaires) les réponses de @Bijay Rungta et @ J.C. Inacio

<?php
if(!extension_loaded('Memcache'))
{
    die("Memcache extension is not loaded");
}

if (!class_exists('Memcache')) 
{
    die('Memcache class not available');
}

$memcacheObj = new Memcache;
if(!$memcacheObj)
{
    die('Could not create memcache object');
}

if (!$memcacheObj->connect('localhost')) 
{
    die('Could not connect to memcache server');
}

// testdata to store in memcache
$testData = array(
    'the' => 'cake',
    'is' => 'a lie',
);

// set data (if not present)
$aData = $memcacheObj->get('data');
if (!$aData) 
{
    if(!$memcacheObj->set('data', $testData, 0, 300))
    {
        die('Memcache could not set the data');
    }
}

// try to fetch data
$aData = $memcacheObj->get('data');
if (!$aData) 
{
    die('Memcache is not responding with data');
}

if($aData !== $testData)
{
    die('Memcache is responding but with wrong data');
}

die('Memcache is working fine');
4
x29a

La meilleure approche dans ce cas est d'utiliser extension_loaded () ou function_exists (), ils sont tout aussi rapides.

Vous pouvez voir des preuves ici:

https://github.com/dragoonis/ppi-framework/blob/master/Cache/Memcached.php#L14

Gardez à l'esprit que certaines extensions PHP telles que APC ont des paramètres php.ini qui peuvent les désactiver même si l'extension peut être chargée. Voici un exemple de vérification par rapport à cela également:

https://github.com/dragoonis/ppi-framework/blob/master/Cache/Apc.php#L79

J'espère que cela t'aides.

4
Paul Dragoonis

c'est ma fonction de test que j'utilise pour vérifier Memcache sur le serveur

<?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 vous voyez quelque chose comme ça

    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) }

cela signifie que tout va bien

À votre santé!

2
Nassim