3

オペコード キャッシュとして APC を使用しています。ファイルが存在しないことを APC にキャッシュさせる方法はありますか? と を設定apc.stat = 0apc.include_once_override = 1ました。include_onceファイルシステムに存在しない可能性のあるファイルの呼び出しのパフォーマンスを改善するために、他に何かすることはありますか? 存在する場合は、明らかにそれを含めたいと考えています。ただし、存在しない場合は存在ないため、 PHP がopen()要求ごとにファイルを呼び出してチェックすることは望ましくありません。

いくつかの背景について説明します。1 つのベース サイトがありますが、顧客ごとにサイトをカスタマイズできます。カスタムログインページを持っている顧客もいれば、完全に独自のページを持っている顧客もいます。

必要に応じてコントローラーをオーバーライドできるようにするために、少し変わった方法で Zend Framework を使用しています。私たちのサイトLoginControllerには、ファイルで定義されたという名前のコントローラがあるかもしれませんcontrollers/LoginController.php。ただし、クライアント「Company」にはカスタム ログイン ページが必要な場合があるため、Company_LoginControllerdefined in a directoryという新しいクラスを作成しcontrollers/company/LoginController.phpます。(この命名規則により、Zend Framework の「モジュール」の概念と一貫性を保つことができます。)

クラスを扱うときは、基本的に次のようにします。

include_once APPLICATION_PATH . '/controllers/company/LoginController.php';
if (class_exists("Company_LoginController")) {
    echo 'customer-specific controller exists';
} else {
    include_once APPLICATION_PATH . '/controllers/LoginController.php';
    echo 'customer-specific controller does not exist; using default';
}

ファイル/controllers/company/LoginController.phpが存在する場合、APC は最初の要求でそれをキャッシュし、ファイルシステムから再度取得することはありません。ただし、ファイル/controllers/company/LoginController.phpが存在しない場合、APC がこのファイルの存在を複数回チェックすることは望ましくありません。これを実現する方法はありますか?

4

3 に答える 3

3

会社のディレクトリに空のファイルを作成することはできますか? APC はそれらを 2 回ロードしないため、サーバーの最初の起動時に「ロード」される空のファイルがあっても害はありません。

于 2009-05-12T21:14:09.403 に答える
2

jmucchiello's answer は、シンプルさのために私の投票を取得しますが、何らかの理由でそれが実用的でない場合は、常に困難な方法で物事を行うことができます.

以下は大まかな未テストの例ですが、APC にファイルの存在を自分で手動で保存するという基本的な考え方を伝える必要があります。

function conditional_include($file) {
  $key = 'file-exists-' . $file;
  //fetch cache key; if it does not exist, then...
  if(($fileExists = apc_fetch($key)) === false) {
    //actually hit the disk to look for the file, and store the result
    apc_store($key, $fileExists = (file_exists($file) ? 1 : 0));
  }

  //only include the file if it exists.
  if($fileExists)
   include_once $file;
}
于 2009-05-12T21:36:03.253 に答える
0

Zend Framework を使用している場合は、Zend_Loader 自動読み込みマジックを使用して、必要なファイルが確実に読み込まれるようにすることをお勧めします。オートローダを使用すると、ZF からほぼすべての include_once 呼び出しを取り除くことができます (Zend_Loader クラスのものを除く)。

これはあなたが求めているものではないかもしれませんが、それでも役立つことを願っています..

于 2010-05-08T18:46:49.693 に答える