Wie überprüfe ich, ob Memcache oder Memcached für PHP installiert ist?
Lesezeit: 4 Minuten
Wie teste ich ggf Speicher oder Zwischenspeicher (für PHP) auf meinem Apache-Webserver installiert ist?
Speicher ist ein Caching-Daemon, der speziell für dynamische Webanwendungen entwickelt wurde, um die Datenbanklast zu verringern, indem Objekte im Speicher gespeichert werden.
Sie können sich phpinfo() ansehen oder prüfen, ob eine der Funktionen von memcache verfügbar ist. Überprüfen Sie abschließend, ob die Memcache Klasse existiert oder nicht.
z.B
if(class_exists('Memcache')){
// Memcache is enabled.
}
Gute Informationen, aber denken Sie daran, dass die Funktion class_exists Ihnen mitteilt, ob es JEDE Klasse in der definierten include/require-Hierarchie mit dem Namen Memcache gibt.
– Alan Sturm
23. September 2009 um 2:39 Uhr
Würde sich eine andere Klasse “memcache” nennen? macht das irgendein Framework oder eine Bibliothek?
–Robin Rodricks
23. September 2009 um 2:51 Uhr
@Jeremy Ich habe noch nie etwas anderes namens Memcache gesehen, also bist du wahrscheinlich sicher, besonders alles, was du auf der Seite hast, ist class_exists()
– Darryl Hein
23. September 2009 um 2:54 Uhr
Alternative wäre die Überprüfung der Erweiterungsversion? phpversion(‘memcache’)
– Mauris
23. September 2009 um 3:05 Uhr
noch besser: if(class_exists('Memcache',false)) das funktioniert gut mit autoload()
Das ist viel besser als zu verwenden class_exists!
– buffcoredave
9. Dezember 2014 um 11:13 Uhr
Nur weil die Erweiterung geladen ist, bedeutet das nicht, dass sie tatsächlich funktioniert.
– S. Kobold
4. Mai 2018 um 20:40 Uhr
Bijay Rungta
Verwenden Sie diesen Code, um nicht nur zu prüfen, ob die Memcache-Erweiterung aktiviert ist, sondern auch, ob der Daemon ausgeführt wird und Daten erfolgreich speichern und abrufen kann:
<?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';
}
?>
Stellen Sie sicher, dass Sie installieren php5-memcache PHP-Bibliothek, um dies stattdessen zu überprüfen php5-memcached Das Code-Snippet ist auch unter gepostet gist.github.com/rungss/5185410
– Bijay Rungta
18. März 2013 um 6:35 Uhr
+1 für das Posten der einzigen Antwort, die tatsächlich auf einen gültigen Memcache-Daemon testet, anstatt nur auf das Vorhandensein der PHP-Erweiterung zu prüfen.
– Simon Osten
20. Juni 2014 um 7:04 Uhr
Denken Sie daran, dass Memcache != Memcached ist. Wenn Sie also Memcache testen möchten, müssen Sie zusätzlich zur Verwendung von class_exists(‘Memcached’) $memcache->addServer($server, 11211, 1); statt ->connect(), und ->set(‘data’, $aData, 300); anstelle von ->set() oben.
– Greg
23. Oktober 2016 um 5:01 Uhr
Ich weiß, dass dies ein alter Thread ist, aber es gibt einen anderen Weg, den ich für jede Erweiterung nützlich gefunden habe.
Laufen
php -m | grep <module_name>
In diesem speziellen Fall:
php -m | grep memcache
Wenn Sie alle PHP-Module auflisten möchten, dann:
php -m
Abhängig von Ihrem System erhalten Sie eine Ausgabe ähnlich der folgenden:
[PHP Modules]
apc
bcmath
bz2
... lots of other modules ...
mbstring
memcache
... and still more modules ...
zip
zlib
[Zend Modules]
Sie können sehen, dass sich Memcache in dieser Liste befindet.
antitoxisch
Beachten Sie, dass alle class_exists, extensions_loadedund function_existsnur überprüfen die Verbindung zwischen PHP und die memcache Paket.
Um tatsächlich zu prüfen, ob Memcache installiert ist, müssen Sie entweder:
Kennen Sie die Betriebssystemplattform und verwenden Sie Shell-Befehle, um zu überprüfen, ob das Memcache-Paket installiert ist
oder testen Sie, ob die Memcache-Verbindung auf dem erwarteten Port hergestellt werden kann
BEARBEITEN 2: OK, eigentlich ist hier eine einfachere Komplettlösung:
if (class_exists('Memcache')) {
$memcache = new Memcache;
$isMemcacheAvailable = @$memcache->connect('localhost');
}
if ($isMemcacheAvailable) {
//...
}
Veralteter Code unten
BEARBEITEN: Eigentlich müssen Sie PHP zwingen, zuerst einen Fehler bei Warnungen auszulösen. Schauen Sie sich diese Antwort auf die SO-Frage an.
Anschließend können Sie die Verbindung testen über:
try {
$memcache->connect('localhost');
} catch (Exception $e) {
// well it's not here
}