Ответ 1
Вы можете посмотреть на phpinfo() или проверить, доступна ли какая-либо из функций memcache. В конечном счете, проверьте, существует ли класс Memcache
.
например.
if(class_exists('Memcache')){
// Memcache is enabled.
}
Как проверить, если memcache или memcached (для PHP) установлен на моем веб-сервере Apache?
Memcache - это демон кэширования, разработанный специально для динамические веб-приложения для уменьшения загрузки базы данных сохранение объектов в памяти.
Вы можете посмотреть на 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';
}
?>
Я знаю, что это старый поток, но есть другой способ, который я нашел полезным для любого расширения.
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 находится в этом списке.
Обратите внимание, что все class_exists
, extensions_loaded
и function_exists
только проверяют ссылку между PHP
и пакетом 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
}
У вас есть несколько вариантов;)
$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 на сервере
<?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) }
это означает, что все в порядке
Ура!
Я объединил, уменьшил и расширил (еще несколько проверок) ответы @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');