2

Windows XPでPHPバージョン5.2.11でSymfony(1.2.9)を実行しています。

APCをインストールしました(バージョン3.0.19)

PHPスクリプトを実行して、apcが正しく機能している(機能している)ことを証明できます。ただし、symfonyアクションでAPC呼び出しを使用しようとすると、次のエラーが発生します(apache error.logファイル内)。

[apc-error]クラスsfconfigを再宣言できません

これはすぐにApacheをクラッシュさせます。

Symfony sfAPCCacheラッパーを使用して、apc_*関数を直接呼び出してみました。結果は同じです。なぜこれが起こっているのか誰かが知っていますか?

4

5 に答える 5

3

これらのスレッドをチェックアウトしてください:

http://pecl.php.net/bugs/bug.php?id=16860

http://old.nabble.com/APC-under-WinXP-crashes-td25872662.html

于 2009-12-01T03:22:29.100 に答える
2

今日、このエラーは私にも起こりました、そして私はそれがなぜ起こり得るのか(考えられる他の理由の中で)気づきました。

APCは、クラスの名前空間を含む完全修飾名ですべてのクラスを正しく識別します。残念ながら、同じクラスをさまざまな名前で参照することになりかねません。

例えば:

コードに間違った「use」ステートメントがあり、名前空間のないクラスを名前空間内にあるかのようにインポートしました。

「MyClass」というクラスは名前空間「\」にありました。これは、その正しい完全修飾名が「\MyClass」であることを意味します。

ある時点で、クラスは非修飾名「MyClass」で参照され、自動ロードされました。別のファイルで、useステートメントで名前空間プレフィックスが付いたクラスを(間違って)参照しました。たとえば、「use \ SomeNamespace\MyClass;」と言います。その結果、クラスは(再び)私のグローバル__autoload()メソッドに渡されましたが、名前は異なります。さらに悪いことに、autoloadメソッドはとにかくクラスを見つけるのに十分賢いものでした。

すぐにスクリプトが機能しなくなり、APCが「[apc-error]クラスを再宣言できません...」をApacheWebサーバーのerror.logに書き込んだだけでした。私のページは利用できなくなりました。

これはAPCのバグではなく、単に正しい動作です。

私の場合、APCを一時的に無効にして(競合に関係なくスクリプトが実行されるように)、echoステートメントを__autoload関数にフックして、渡されたパラメーターのリストを生成するのに役立ちました。間違った名前でロードされたクラスはすぐに表示され、それを修正してAPCを再度有効にすることができました。

これが誰かを助けることを願っています。

于 2010-10-06T22:51:14.683 に答える
0

私はAPCとは無関係になる前にこのエラーが発生し、cache:clearを実行するだけでなく、すべてのファイルがキャッシュディレクトリから削除されたことを確認するのに常に役立ちました。

于 2009-12-01T03:22:46.137 に答える
0

私は、php5.2.11といくつかのapcバージョンを使用する開発Windowsシステムで同じ状況を生きていました。説明したのと同じ状況で、stat = 0ですべてが機能しますが、stat = 1に設定すると、apacheが「クラス[一部のクラス]を再宣言できません」というエラーでクラッシュします。このコードは、負荷の高いLinux本番サーバーで数か月間稼働しているほか、別のWindowsシステムで動作しています。apcに関連するバグはないと確信しています。OSを再インストールした後、マシンで起動しました。

私はいくつかのクラスインクルードをコメントアウトするのに時間を費やし、それがいくつかのインクルードファイルでは機能するが特定のファイルでは機能しないことに気づきました。私は自分のコードをチェックしましたが、クラスの違いに目立った違いはありません。

次に、Zend Studioのエディターで空白を追加して、すべてのインクルードファイルを保存しました。私が知っているのはばかげているように見えますが、それは機能します!!! 私は何人かの人々と一緒にプロジェクトに取り組んでおり、svnを使用しており、誰もがnotepad ++、editplusなどのさまざまなテキストエディタを使用しています...

ただし、ansi、utf8、バイトマークの順序の有無など、さまざまな構成のさまざまなエディターでファイルを保存しようとしてもエラーを再現できませんでした。しかし、私の問題はファイル形式(エンコーディング、pc / unixモード)。エラーを再現し、より詳細な情報を提供したいのですが、同じ問題のある別のプロジェクトで解決策を試しましたが、どちらでも機能します。

この問題について別の見方をしたいと思います。

于 2009-12-15T11:43:53.213 に答える
0

私にとってこれを解決したのは、私の要件が同じパスを持っていることを確認することでした。

たとえば、私が得たエラーは次のとおりです。
[apc-error] Cannot redeclare class someClass

ファイルには、AIには次のものがあります。
require_once '/path/to/someClass.php';

someClass.phpと同じディレクトリにあるファイルBには、次のものがあります。
require_once 'someClass.php';

パスが一方に指定され、もう一方には指定されていないため、APCキャッシングはそれらが同じファイルであることを理解していなかったと思います。

于 2010-02-02T23:11:51.103 に答える