1

同じコード ベースの異なるバージョンを実行する複数の仮想ホストを使用して、1 つのインスタンスの Apache セットアップを実行しています。

これは、1 つの仮想ホストがクラスの 1 つのバージョンを提供でき、別の仮想ホストが同じクラスの 2 番目のバージョン (同じ名前空間、同じ名前) を提供できることを意味します。

/file/path/host-a/MyClass.php
/file/path/host-b/MyClass.php

仮想ホストの 1 つが「間違った」バージョンのクラスを使用していることを示す例外が発生することがあります。たとえば、ホスト b では、スクリプトへのファイル パスで例外が発生します。/file/path/host-a/MyClass.php

APC optcode キャッシュは、少なくともキーの一部としてファイルパスを使用していると思いましたが、次のような修飾されたクラス名のみを使用しているのではないかと心配しています。

My\Namespace\MyClass

そうですか?可能であれば、この件に関するドキュメントを参照してください。

4

1 に答える 1

1

答え

この質問への回答に関するドキュメントは見つかりませんでしたがphp - APC opcode caching on different file versionsは、APC optcode キャッシュが実際にはクラスを定義するファイルのパスを使用して、同じ名前のクラスを区別することを説明しています。

デバッグ

@hakra が APC の動作を指摘した後、私は自分の努力をクラスローダーに集中させることができました。クラス ローダーはmemcached、クラス パスを格納するためのキャッシュとして使用します。キャッシュ キーを構築するためのコードが問題の原因であることが判明しました。APC と思われるものではありませんでした。

したがって、クラスの誤った「バージョン」がロードされていることがわかる同様の状況にある場合は、クラスローダーが期待どおりに機能していることを確認してください。もちろん、明らかな手がかりの 1 つは、問題のクラスのファイル パスです。

于 2012-08-28T10:25:04.627 に答える