2012-11-06 6 views
6

私は、そのファイルのコピーがあるまで、製品インスタンスがメインフレームワークファイルを使用するフレームワークを構築しています。私はそれが最初/view-users.phpためMY_PRODUCT_ROOTになりますし、それが見つからない場合は、それがその後、MY_FRAMEWORK_ROOT /ビュー、ユーザーに見ていきますinclude('view-users.php');呼び出すのであればPHPにパスの順序とステータスキャッシュが含まれています

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

:以下、これは私が行っている達成するために.php。

この手順は、製品ルートにファイルを追加するまで非常にうまく動作しています。 PHP/Apacheがインクルードファイルをキャッシュしていて、clearstatcache(true);を実行して状態キャッシュをクリアすると思います。 PHPはおそらくinclude()の中にfile_existsを使用しています。新しいファイルがまだ存在しないと考えます。 Apacheを再起動しても何の効果もありませんでした。

残念ながらclearstatcache(true);を実行しても役に立ちません。一度だけ私はMY_FRAMEWORK_ROOT /ファイルを削除しましたが、キャッシュをクリアして再度試してみると、MY_PRODUCT_ROOT /ファイルが見つかります。少し困惑

イム

は、私たちは、ファイル(複数可)が存在するか否かのPHP/Apacheの理解をリフレッシュする必要が知っているが、 clearstatcache(true);支援していません...

任意のアイデアは?

更新日:修正、Apacheを再起動するのが今役立つようです。開発環境はWindows上でのZend Server CEのPHP 5.3.14、本番環境のCentOSのLinuxのhttpdです:私は、既存のMY_FRAMEWORK_ROOTファイルに重なるように、MY_PRODUCT_ROOTにファイルを追加しようとすると、これが唯一の

UPDATEは、カスタマイズのため、発生することを改めて表明します、PHP 5.3+私の開発環境でZendオプティマイザが有効になっているという事実は、APCや他のキャッシングスクリプトを使用していない場合でも効果があります。

+0

より正確には、apacheの再起動はclearstatcacheの呼び出し時にのみ機能します。私は実際に、フレームワークファイルを削除し、ページをリロードし、フレームワークファイルを戻す必要があります – Prof83

+1

apcキャッシュが有効になっていますか? (または別のoptcodeキャッシュ) –

+0

私はまた、PHP 5.3.3とApache 2.2.16で問題を再現することができませんでした。あなたの環境に関する詳細を述べることができますか? – Lars

答えて

2

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

これはインクルードファイルの内容をキャッシュしているため、clearstatcacheは機能しません。私はZend Optimizerを無効にして、今すぐ動作します。

+1

あなた自身の答えを受け入れるかもしれないことに注意してください。また、 'clearstatcache(true、true)'がZend Optimizer +がアクティブな時に違いがあるかどうか確認してください。そうでない場合は、製品ホームページにバグレポートを提出する必要があります。 – Lars

+0

ありがとう@Larsはそれをテストします... – Prof83

関連する問題