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

如何testingmemcache或memcached (用于PHP)是否安装在我的Apache Web服务器上?

Memcache是一个caching守护进程,专门为dynamicWeb应用程序devise,通过将对象存储在内存中来减less数据库负载。

你可以看看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] 

你可以看到memcache在这个列表中。

请注意,所有class_existsextensions_loadedfunction_exists 检查PHPmemcache包之间的链接

要真正检查是否安装了memcache,您必须:

  • 了解OS平台并使用shell命令检查是否安装了memcache软件包
  • 或者testing是否可以在预期的端口上build立memcache连接

编辑2 :好的,其实这里有一个更简单的完整解决scheme:

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

下面的过时的代码


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

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

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

你有几个select;)

 $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的testing函数

 <?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) } 

这意味着一切都好

干杯!