php.net のドキュメントは、APC 書き込みの失敗の原因について非常にむらがあります。apc_store() の呼び出しが失敗するのはどのようなシナリオですか?
利用可能なディスク容量は十分にあり、障害はむらがあります。保存操作が成功する場合もあれば、失敗する場合もあります。
php cli の場合、別のオプションで有効にする必要があります: apc.enable_cli=On
私の状況では、Webブラウザから実行すると機能しましたが、php cliで同じものを実行すると機能しませんでした。
私もまったく同じ状況でした。
Cron Jobs を使用するコードから、Supervisord で管理される Gearman Workers を使用するコードに移行しました。
すべてが壊れた。APC でキャッシュを機能させることができず、ファイルベース キャッシュの使用に戻さなければなりませんでした。
最終的に、cron ジョブを使用しているときは、コマンド ラインではなく wget を介して各ページをロードすることがわかりました。この違いは、コマンド ライン経由で PHP スクリプトをロードする Supervisord が機能しないことを意味していました。これは、デフォルトでは APC がコマンド ライン経由で機能しないためです。
修正....
apc.enable_cli=On
メモリ不足 (apc に割り当てられたメモリ、つまり)
この愚かな(そして何らかの理由で閉じられた)バグが私の問題でした:
http://pecl.php.net/bugs/bug.php?id=16814
apc を機能させるには、apc バージョン 3.1.2 にロールバックする必要があります。php.iniのapc設定をいじることはありませんでした(私はMac OS 10.5で、Apache 2、php 5.3を使用しています)。
私の場合、このテスト スクリプトは 3.1.2 で 3 つの「true」を示し、3.1.3p1 で true/false/true を示しました。
var_dump( apc_store('test', 'one') ); var_dump( apc_store('test', 'two') ); var_dump( apc_store('diff', 'thr') );
http://php.net/manual/en/apc.configuration.php
php.ini の apc.ttl および apc.user_ttl 設定:
これをゼロのままにしておくと、新しいエントリがキャッシュされずに、APC のキャッシュが古いエントリでいっぱいになる可能性があることを意味します。
ディスク容量が不足しているか、ストレージ ディレクトリへのアクセス許可が拒否されていますか?
ubuntu 10.04 および debian 安定版でインストールされたバージョンにバグがあります。パッケージをhttp://packages.debian.org/sid/php-apc (3.1.7)のバージョンに置き換えると、正常に動作します。
グレッグが言ったことに加えて、構成エラーがこれを引き起こす可能性があることを付け加えておきます。
その特定のキーがすでに存在し、TTL の有効期限が切れる前に再度書き込もうとすると、apc_store は失敗します。したがって、実際には失敗しましたが、キャッシュはまだ存在するため、戻り値 false はほとんど無視できます。これを回避したい場合は、代わりに apc_add を使用してください。 http://php.net/manual/en/function.apc-add.php