Подтвердить что ты не робот

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

Как проверить, если memcache или memcached (для PHP) установлен на моем веб-сервере Apache?

Memcache - это демон кэширования, разработанный специально для динамические веб-приложения для уменьшения загрузки базы данных сохранение объектов в памяти.

4b9b3361

Ответ 1

Вы можете посмотреть на phpinfo() или проверить, доступна ли какая-либо из функций memcache. В конечном счете, проверьте, существует ли класс Memcache.

например.

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

Ответ 2

почему бы не использовать функцию extension_loaded()?

Ответ 3

Используйте этот код, чтобы не только проверить, включено ли расширение 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';
}

?>

Ответ 4

Я знаю, что это старый поток, но есть другой способ, который я нашел полезным для любого расширения.

Run

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]

Вы можете видеть, что memcache находится в этом списке.

Ответ 5

Обратите внимание, что все class_exists, extensions_loaded и function_exists только проверяют ссылку между PHP и пакетом memcache.

Чтобы проверить, установлен ли memcache, вы должны:

  • знать платформу ОС и использовать команды оболочки, чтобы проверить, установлен ли пакет memcache.
  • или проверить, может ли соединение memcache быть установлено на ожидаемом порту

РЕДАКТИРОВАТЬ 2: ОК, на самом деле это более простое решение:

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

Устаревший код ниже


EDIT. На самом деле вы должны заставить PHP сначала вызывать ошибку при предупреждении. Посмотрите на этот ответ на вопрос SO.

Затем вы можете проверить соединение через:

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

Ответ 6

У вас есть несколько вариантов;)

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

Ответ 7

Может показаться, что он работает в PHP через командную строку -

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

Ответ 8

Наилучший подход в этом случае - использовать функции 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

Надеюсь, что это поможет.

Ответ 9

это моя тестовая функция, которую я использую для проверки 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 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 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) }

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

Ура!

Ответ 10

Я объединил, уменьшил и расширил (еще несколько проверок) ответы @Bijay Rungta и @JC 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');