6

そのファイルの独自のバージョンのコピーができるまで、製品インスタンスがメイン フレームワーク ファイルを使用するフレームワークを構築しています。これを達成するために、私は次のことを行いました:

set_include_path(MY_PRODUCT_ROOT.'/' . PATH_SEPARATOR . MY_FRAMEWORK_ROOT.'/');

したがって、呼び出すinclude('view-users.php');と、最初に MY_PRODUCT_ROOT で /view-users.php が検索され、それが見つからない場合は、MY_FRAMEWORK_ROOT/view-users.php が検索されます。

製品ルートにファイルを追加するまで、この手順は非常にうまく機能しています。clearstatcache(true);PHP/Apache がインクルードをキャッシュしていることは知っており、ステータス キャッシュをクリアするために実行すると考えられます。PHP は、その include(); 内で file_exists を使用する可能性があります。そして、新しいファイルがまだ存在しないと考えています。Apache を再起動しようとしましたが、効果はありませんでした。

残念ながら、ランニングclearstatcache(true);も役に立ちません。MY_FRAMEWORK_ROOT/file を削除した場合にのみ、キャッシュをクリアして再試行すると考えられるため、MY_PRODUCT_ROOT/file が見つかります。

ファイルが存在するかどうかについての PHP/Apache の理解を更新する必要があることはわかっていますが、役に立ちclearstatcache(true);ません...

何か案は?

更新: 修正、Apache の再起動が役立つようです。これは、カスタマイズのために既存の MY_FRAMEWORK_ROOT ファイルをオーバーラップするために MY_PRODUCT_ROOT にファイルを追加しようとした場合にのみ発生することを繰り返します。

更新: 開発環境は、Windows 上の Zend Server CE PHP 5.3.14、運用環境 Centos linux httpd、PHP 5.3+ です。私の開発環境でZendオプティマイザーが有効になっているという事実は、効果がある可能性があります。また、APCやその他のキャッシュスクリプトを使用していません

4

1 に答える 1

2

Zend Optimizer+は、オペコードのキャッシュと最適化によって PHP の実行を高速化します。コンパイル済みのスクリプト バイトコードを共有メモリに格納します。これにより、ディスクからコードを読み取り、将来のアクセス時にコンパイルする段階が不要になります。パフォーマンスをさらに向上させるために、格納されたバイトコードは実行速度が向上するように最適化されています。

これはインクルードで見つかったファイルの内容をキャッシュしているため、clearstatcache は機能しません。Zend Optimizer を無効にしましたが、現在は機能しています。

于 2012-11-06T11:11:05.400 に答える