如何检查是否为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_exists
, extensions_loaded
和function_exists
仅检查PHP
和memcache
包之间的链接 。
要真正检查是否安装了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) }
这意味着一切都好
干杯!