旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【PHP】 APCuでfetchに失敗する

最近はlibraryのテストしたり検証をしたり 大抵はここはこうしたほうがいいとかこういうルールでやるならこっちのほうがいいんじゃないかっていう討論だけ繰り広げている状態です。 話がまとまれば作業は早いのですが。

さてそんな中今まで意識していないかったAPCuというものを使って作業をする部分が出てきました。 やりたいことはAPCuに配列のデータを突っ込むことです。 memcachedのような使い方をしたいということですね。

プロセス間通信も発生しないので爆速で動くのではということでAPCuについて調査しているところで以下に躓きました。

適当にテストファイルを作り、コマンドラインより実行させようとした時 以下のようなエラーが発生しました。

<?php

$key = 'hoge';

$data = [
    'test',
    'hoge' => [
        'fuga',
        'foo' => 'bar'
    ]
];

apcu_store($key, $data);

print_r(apcu_cache_info());

apcu_fetch($key);

本当に単純な処理ですね。 ここから作ったファイルをコマンドラインから実行してみると以下エラーが発生しました。

Warning: apcu_cache_info(): No APC info available.  Perhaps APC is not enabled? Check apc.enabled in your ini

APCuが有効になっていないかも?ってことで、ああ、なるほどと。 ということでphpinfoを確認

php -r 'phpinfo();' | grep apc.enable
apc.enable_cli => Off => Off
apc.enabled => On => On

有効になっている・・・ ここで見つけたのがapc.enable_cliの記述 もしかしたらと思い、php.iniに以下を追加

[APCu]
; add apc
apc.enabled=1

apc.enable_cli=1 ; add cli

apc.shm_size=64M
apc.ttl=3600
apc.gc_ttl=3600

するとうまく動くようになりました。 どうやらapc.enable_cliコマンドラインから叩く場合APCuを有効にする設定だったようです。 さて、色々調べながらこれからAPCuの有用性について調べていきます。