Как проверить, установлен ли memcache или memcached (для PHP) на моем веб-сервере Apache?
Memcache – это демон кэширования, разработанный специально для динамических веб-приложений для уменьшения загрузки базы данных путем хранения объектов в памяти.
Вы можете посмотреть на phpinfo () или проверить, доступна ли какая-либо из функций memcache. В конечном счете, проверьте, существует ли класс Memcache
или нет.
например
if(class_exists('Memcache')){ // Memcache is enabled. }
почему бы не использовать функцию extension_loaded () ?
Используйте этот код, чтобы не только проверить, включено ли расширение memcache, но также запущен ли демон и может ли он хранить и извлекать данные успешно:
<?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'; } ?>
Я знаю, что это старый поток, но есть другой способ, который я нашел полезным для любого расширения.
Бег
php -m | grep <module_name>
В этом конкретном случае:
php -m | grep memcache
Если вы хотите перечислить все модули PHP, тогда:
php -m
В зависимости от вашей системы вы получите аналогичный результат:
[PHP Modules] apc bcmath bz2 ... lots of other modules ... mbstring memcache ... and still more modules ... zip zlib [Zend Modules]
-[PHP Modules] apc bcmath bz2 ... lots of other modules ... mbstring memcache ... and still more modules ... zip zlib [Zend Modules]
Вы можете видеть, что memcache находится в этом списке.
Обратите внимание, что все class_exists
, extensions_loaded
и function_exists
проверяют только связь между PHP
и пакетом memcache
.
Чтобы проверить, установлен ли memcache, вы должны:
EDIT 2 : ОК, на самом деле это более простое решение:
if (class_exists('Memcache')) { $memcache = new Memcache; $isMemcacheAvailable = @$memcache->connect('localhost'); } if ($isMemcacheAvailable) { //... }
EDIT : На самом деле вы должны заставить PHP сначала вызывать ошибку при предупреждении. Посмотрите на этот ответный вопрос .
Затем вы можете проверить соединение через:
try { $memcache->connect('localhost'); } catch (Exception $e) { // well it's not here }
У вас есть несколько вариантов;)
$memcache_enabled = class_exists('Memcache'); $memcache_enabled = extension_loaded('memcache'); $memcache_enabled = function_exists('memcache_connect');
Может оказаться актуальным, если он работает в PHP через командную строку,
<path-to-php-binary>php -i | grep memcache
Наилучший подход в этом случае – использовать функции extension_loaded () или function_exists (), которые они одинаково быстрей.
Здесь вы можете увидеть доказательства:
https://github.com/dragoonis/ppi-framework/blob/master/Cache/Memcached.php#L140
Имейте в виду, что некоторые расширения PHP, такие как APC, имеют настройки php.ini, которые могут отключить их, даже если расширение может быть загружено. Вот пример того, как проверить это:
https://github.com/dragoonis/ppi-framework/blob/master/Cache/Apc.php#L79
Надеюсь это поможет.
это моя тестовая функция, которую я использую для проверки Memcache на сервере
<?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); }
если вы видите что-то вроде этого
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) }
это означает, что все в порядке
Ура!