【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の有用性について調べていきます。