web-dev-qa-db-ja.com

memcacheまたはmemcachedがPHPにインストールされているかどうかを確認するにはどうすればよいですか?

memcache または memcached (PHPの場合)がApache Webサーバーにインストールされているかどうかをテストするにはどうすればよいですか?

Memcacheは、動的Webアプリケーション向けに設計されたキャッシュデーモンで、オブジェクトをメモリに保存することでデータベースの負荷を軽減します。

46
Robinicks

Phpinfo()を見るか、memcacheの機能が利用可能かどうかを確認できます。最終的に、Memcacheクラスが存在するかどうかを確認します。

例えば.

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

このコードを使用して、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';
}

?>
25
Bijay Rungta

extension_loaded() 関数を使用しないのはなぜですか?

25
J.C. Inacio

私はこれが古いスレッドであることを知っていますが、拡張機能に役立つ別の方法があります。

走る

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がこのリストにあることがわかります。

20
hlasso

すべてのclass_existsextensions_loaded、およびfunction_existsonlycheckthe linkPHPmemcacheパッケージ。

Memcacheがインストールされているかどうかを実際に確認するには、次のいずれかが必要です。

  • oSプラットフォームを理解し、シェルコマンドを使用してmemcacheパッケージがインストールされているかどうかを確認します
  • または、予想されるポートでmemcache接続を確立できるかどうかをテストします

EDIT 2:OK、実際にはここに簡単な完全なソリューションがあります:

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

以下の古いコード


[〜#〜] edit [〜#〜]:実際には、PHPが最初に警告に対してエラーをスローするように強制する必要があります。これをご覧ください SO question answer。

その後、次の方法で接続をテストできます。

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

いくつかのオプションがあります;)

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

コマンドライン経由でPHPで実行されているかどうかを確認することも重要です。

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

@Bijay Rungtaと@ J.Cからの回答を結合、縮小、および拡張(さらにチェック)しました。イナシオ

<?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');
4
x29a

この場合の最善のアプローチは、extension_loaded()またはfunction_exists()を使用することです。これらは同等に高速です。

ここで証拠を見ることができます:

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

APCなどの一部のPHP拡張機能には、拡張機能がロードされている場合でも無効にできるphp.ini設定があります。これを確認する方法の例を次に示します。

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

お役に立てれば。

4
Paul Dragoonis

これは、サーバー上の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'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) }

それはすべてが大丈夫であることを意味します

乾杯!

2
Nassim