如何检查是否为PHP安装了memcache或memcached?

Rob*_*cks 48 php apache scripting webserver

如何测试我的Apache网络服务器上是否安装了memcachememcached(用于PHP)?

Memcache是一个缓存守护进程,专门为动态Web应用程序设计,通过在内存中存储对象来减少数据库负载.

mau*_*ris 51

您可以查看phpinfo()或检查memcache的任何功能是否可用.最后,检查Memcache班级是否存在.

例如

if(class_exists('Memcache')){
  // Memcache is enabled.
}
Run Code Online (Sandbox Code Playgroud)

  • 好消息,但要记住所有的<code> class_exists </ code>函数告诉你的是,如果有一个在定义的任何类包括/需要命名的内存缓存层次结构. (6认同)
  • 更好的是:`if(class_exists('Memcache',false))`哪个适用于autoload() (4认同)
  • @Jeremy我从来没有见过任何其他叫做memcache的东西,所以你可能很安全,特别是你在页面上的所有内容都是class_exists() (3认同)
  • 替代方案是检查扩展版本?phpversion( '内存缓存') (2认同)

J.C*_*cio 27

为什么不使用extension_loaded()函数?

  • 这比使用`class_exists`要好得多! (2认同)

Bij*_*gta 27

使用此代码不仅可以检查是否启用了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';
}

?>
Run Code Online (Sandbox Code Playgroud)

  • +1用于发布实际测试有效memcache守护程序的唯一答案,而不仅仅是检查是否存在PHP扩展. (2认同)
  • 提醒一下 Memcache != Memcached,所以如果你想测试 Memcached,除了使用 class_exists('Memcached'),你还必须 $memcache-&gt;addServer($server, 11211, 1); 而不是 -&gt;connect(),并执行 -&gt;set('data', $aData, 300); 而不是上面的 -&gt;set() 。 (2认同)

hla*_*sso 20

我知道这是一个旧线程,但我发现另一种方法对任何扩展都有用.

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]
Run Code Online (Sandbox Code Playgroud)

您可以看到memcache在此列表中.

  • @Simon,这是对的.如果要检查memcache是​​否正在运行,可以运行:_ps -ef | grep memcache_只要你拥有正确的权限(我以root身份运行),这将在Linux上运行. (3认同)
  • 我不认为这会告诉你memcached守护进程是否真的在运行,但...... :-( (2认同)

mgu*_*utt 10

你有几个选择;)

$memcache_enabled = class_exists('Memcache');
$memcache_enabled = extension_loaded('memcache');
$memcache_enabled = function_exists('memcache_connect');
Run Code Online (Sandbox Code Playgroud)


ant*_*xic 10

需要注意的是所有的class_exists,extensions_loaded以及function_exists 检查链路之间PHPmemcache包装.

要实际检查是否安装了memcache,您必须:

  • 了解操作系统平台并使用shell命令检查是否安装了memcache包
  • 或者测试是否可以在预期的端口上建立memcache连接

编辑2:好的,实际上这是一个更简单的完整解决方案:

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

下面的过时代码


编辑:实际上你必须强制PHP首先在警告上抛出错误.看看这个SO问题的答案.

然后您可以通过以下方式测试连接:

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


dan*_*nno 7

通过命令行查看它是否在PHP中运行可能是相关的 -

<path-to-php-binary>php -i | grep memcache
Run Code Online (Sandbox Code Playgroud)


x29*_*29a 5

我合并、缩小和扩展(更多检查)@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');
Run Code Online (Sandbox Code Playgroud)