Nasıl memcache veya memcached PHP için yüklü olup olmadığını kontrol etmek için?

8 Cevap php

memcache veya memcached (PHP için) benim Apache web sunucusu üzerinde yüklü olup olmadığını nasıl test ederim?

Memcache is a caching daemon designed especially for dynamic web applications to decrease database load by storing objects in memory.

8 Cevap

Sen phpinfo bakmak () veya memcache işlevlerden herhangi müsait olup olmadığını kontrol edebilirsiniz. Sonuçta, Memcache class var olup olmadığını kontrol edin.

örneğin

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

neden extension_loaded() fonksiyonunu kullanmak değil mi?

Bu durumda en iyi yaklaşım, eşit olarak hızlı) () veya function_exists (extension_loaded kullanmaktır.

Burada kanıt görebilirsiniz:

https://github.com/dragoonis/ppi-framework/blob/master/Cache/Memcached.php#L140

Bear in mind that some PHP extensions such as APC have php.ini settings that can disable them even though the extension may be loaded. Here is an example of how to check against that also:

https://github.com/dragoonis/ppi-framework/blob/master/Cache/Apc.php#L79

Umarım bu yardımcı olur.

Birkaç seçeneğiniz var ;)

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

Bu eski bir konu olduğunu biliyorum, ama ben herhangi bir uzantısı için yararlı buldum başka bir yol daha var.

Koşmak

php -m | grep <module_name>

Bu özel durumda:

php -m | grep memcache

Eğer tüm PHP modülleri listelemek istiyorsanız:

php -m

Sisteminize bağlı olarak buna benzer bir çıktı almak istiyorum:

[PHP Modules]
apc
bcmath
bz2
... lots of other modules ...
mbstring
memcache
 ... and still more modules ...
zip
zlib

[Zend Modules]

Bunu memcache bu listede görebilirsiniz.

Bu gibi iyi komut satırı üzerinden PHP çalışıyorsa eğer görmek için ilgili olabilir

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

Bunu kullanın:

<?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';
}

?>

Not class_exists, extensions_loaded tümünü ve function_exists only kontrol the link ile {[(5) ]} ve memcache paketi.

Aslında memcache ya gerekir yüklü olup olmadığını kontrol etmek için:

  • OS platformunu bilmek ve kabuk kullanmak memcache paketi yüklü olup olmadığını kontrol etmek için komutlar
  • veya memcache bağlantı beklenen port üzerinde kurulmuş olup olmadığını test

EDIT 2: Tamam, aslında burada daha kolay bir komple çözüm:

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

Outdated code below


EDIT: Aslında ilk uyarıları hata atmak için PHP zorlamak gerekir. Bu SO question cevap bakabilirsiniz.

Daha sonra bağlantıyı üzerinden test edebilirsiniz:

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