18

php.net のドキュメントは、APC 書き込みの失敗の原因について非常にむらがあります。apc_store() の呼び出しが失敗するのはどのようなシナリオですか?

利用可能なディスク容量は十分にあり、障害はむらがあります。保存操作が成功する場合もあれば、失敗する場合もあります。

4

9 に答える 9

52

php cli の場合、別のオプションで有効にする必要があります: apc.enable_cli=On

私の状況では、Webブラウザから実行すると機能しましたが、php cliで同じものを実行すると機能しませんでした。

于 2010-01-26T19:41:42.563 に答える
10

私もまったく同じ状況でした。

Cron Jobs を使用するコードから、Supervisord で管理される Gearman Workers を使用するコードに移行しました。

すべてが壊れた。APC でキャッシュを機能させることができず、ファイルベース キャッシュの使用に戻さなければなりませんでした。

最終的に、cron ジョブを使用しているときは、コマンド ラインではなく wget を介して各ページをロードすることがわかりました。この違いは、コマンド ライン経由で PHP スクリプトをロードする Supervisord が機能しないことを意味していました。これは、デフォルトでは APC がコマンド ライン経由で機能しないためです。

修正....

apc.enable_cli=On

于 2011-12-20T16:09:39.183 に答える
6

メモリ不足 (apc に割り当てられたメモリ、つまり)

于 2009-11-03T21:27:44.660 に答える
4

この愚かな(そして何らかの理由で閉じられた)バグが私の問題でした:

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') );

于 2010-05-06T02:58:04.047 に答える
2

http://php.net/manual/en/apc.configuration.php

php.ini の apc.ttl および apc.user_ttl 設定:

これをゼロのままにしておくと、新しいエントリがキャッシュされずに、APC のキャッシュが古いエントリでいっぱいになる可能性があることを意味します。

于 2010-01-26T19:51:06.703 に答える
1

ディスク容量が不足しているか、ストレージ ディレクトリへのアクセス許可が拒否されていますか?

于 2009-11-03T20:50:51.840 に答える
1

ubuntu 10.04 および debian 安定版でインストールされたバージョンにバグがあります。パッケージをhttp://packages.debian.org/sid/php-apc (3.1.7)のバージョンに置き換えると、正常に動作します。

于 2011-08-02T09:48:09.863 に答える
1

グレッグが言ったことに加えて、構成エラーがこれを引き起こす可能性があることを付け加えておきます。

于 2009-11-03T21:04:37.500 に答える
0

その特定のキーがすでに存在し、TTL の有効期限が切れる前に再度書き込もうとすると、apc_store は失敗します。したがって、実際には失敗しましたが、キャッシュはまだ存在するため、戻り値 false はほとんど無視できます。これを回避したい場合は、代わりに apc_add を使用してください。 http://php.net/manual/en/function.apc-add.php

于 2010-09-14T18:27:42.490 に答える