Intereting Posts

Как проверить, установлен ли memcache или memcached для PHP?

Как проверить, установлен ли 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, вы должны:

  • знать платформу ОС и использовать команды оболочки для проверки того, установлен ли пакет 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) } 

это означает, что все в порядке

Ура!