PHPでは、 include 、 require 、 file_exists 、またはis_fileなどのファイル操作関数を呼び出すときはいつでも、PHPは指定されたパスの実際の絶対パスを解析する必要があります。この解析プロセスには、特にSymlinksまたは相対パスを使用する場合、ファイルシステムを照会することが含まれます。
システムコールのオーバーヘッドを減らすために、PHPはパス解像度の結果をキャッシュするために「RealPathキャッシュ」を導入しました。 RealPath_cache_sizeはこのキャッシュのサイズ制限であり、ユニットはバイトです。通常、デフォルト値は16Kであり、小規模プロジェクトでは十分かもしれませんが、大規模なプロジェクトですばやく埋める傾向があります。
PHPのRealPathキャッシュは、パス解像度の結果を保存するために使用されるメモリのハッシュテーブルです。 PHPスクリプトがパスを解析する必要があるたびに、最初にキャッシュを探します。
キャッシュがヒットした場合、システムコールを保存するためにキャッシュ値が直接返されます。
キャッシュが見逃した場合、システム呼び出しが行われ、パスが解析され、結果がキャッシュに入れられます。
キャッシュがいっぱいの場合、古いキャッシュアイテムが削除されます。
このメカニズムは単純ですが、複雑なファイル構造を持つプロジェクトで非常に重要であり、多くの依存関係に依存しています。たとえば、自動負荷(Composer Autoloaderなど)を使用するプロジェクトでは、単一のリクエストで数百のファイルをロードする場合があり、それぞれがトリガーパス解像度を必要とします。キャッシュが不十分な場合、各要求が同じ解析を繰り返しているため、不必要なパフォーマンス損失が発生している可能性があります。
次のコードスニペットがあるとします。
<code>&lt;?php for($ i = 0; $ i&lt; 1000; $ i ++){'/var/www/gitbox.net/project/lib/module'を要求します。 ($ i%10)。 '/class.php'; } </code>この例では、10の異なるパスしかありませんが、RealPathキャッシュが小さすぎる場合、PHPは必要なときにパスを再配分し、I/Oオーバーヘッドが追加されます。キャッシュのヒット率が高くなると、解析の数を大幅に減らすことができ、それにより全体的な実行効率が向上します。
PHPのphpinfo()ページを介して現在のRealPathキャッシュの構成と使用量を表示することも、次のコードスニペットを使用してキャッシュの使用量を動的に表示することもできます。
<code>&lt;?php print_r(realpath_cache_get()); </code>キャッシュのサイズを変更するには、 php.iniファイルの次の構成を追加または変更するだけです。
<code> realpath_cache_size = 128k </code>大規模なフレームワーク(Laravel、Symfonyなど)または高い並行性環境で実行されているPHP-FPMプロジェクトの場合、キャッシュが頻繁に失敗しないように128K以上に設定することをお勧めします。
キャッシュサイズに加えて、 RealPath_Cache_TTLは関連するパラメーターでもあり、キャッシュエントリのサバイバル時間を秒単位で指定します。デフォルト値は120秒です。
<code> realpath_cache_ttl = 300 </code>頻繁に展開し、ファイル構造が頻繁に変更される開発環境では、この値を適切に短縮できます。生産環境では、通常、パフォーマンスを改善するために高くなるように設定できます。