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.
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.
}
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';
}
?>
pourquoi ne pas utiliser la fonction extension_loaded () ?
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.
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:
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) {
//...
}
[~ # ~] 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
}
Vous avez plusieurs options;)
$memcache_enabled = class_exists('Memcache');
$memcache_enabled = extension_loaded('memcache');
$memcache_enabled = function_exists('memcache_connect');
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
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');
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.
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é!