10

realpath キャッシュが実際に何をしているのかを理解できませんでした。

ここに私が持っている質問のいくつかがあります:

  • パスがキャッシュされる正確なタイミングと、パスがキャッシュされない可能性のある条件は?

  • どのようにキャッシュされますか? メモリ内、ファイル システム上、他に何かありますか? ファイルシステムの場合、ファイルはどこにありますか?

  • キャッシュはリクエストごとですか? つまり、複数のキャッシュですか、それとも正規のリアルパス キャッシュが 1 つだけですか?

    var_dump(realpath_cache_get())キャッシュをダンプして保持し、ページを更新するとCtrl+ 、キャッシュされたダンプの出力が異なる場合があることに気付きましたF5??? ここで何が起きてるの?

  • キャッシュはいつ、どのようにクリア/クリーニングされますか? バックグラウンド プロセス、ある種のガベージ コレクター。たとえば、ガベージ コレクターの場合: いつ実行され、どのような基準で実行されますか? たとえば、リクエストごとにランダムですか?わかりません、ここで唾を吐いているだけです。

    注: を呼び出して手動でキャッシュをクリアできるようですclearstatcache(true)

realpath_* 関数

設定オプション

realpath_cache_size "16K" PHP_INI_SYSTEMPHP 5.1.0 以降で利用可能です。

realpath_cache_ttl "120" PHP_INI_SYSTEMPHP 5.1.0 以降で利用可能です。

(説明書より)

realpath_cache_size integerPHP が使用するリアルパス キャッシュのサイズを決定します。PHP が多くのファイルを開くシステムでは、実行されるファイル操作の量を反映するために、この値を大きくする必要があります。

realpath_cache_ttl integer特定のファイルまたはディレクトリのリアルパス情報をキャッシュする期間 (秒単位)。ファイルがほとんど変更されないシステムの場合は、値を大きくすることを検討してください。

4

2 に答える 2

-2

PHP の realpath 関数は $ パスをテストします。ファイルが存在するかどうかを確認する対象のファイル/フォルダーを指すパス、または file_exists ($ パス) を呼び出すことと同等と言えます。

ターゲット ファイルが存在し、シンボリック リンク (「ショートカット」という名前のウィンドウ) でない場合は、ファイル名の絶対パスが返され、「/./」または「/../」は含まれません。</p>

ターゲット ファイルがシンボリック リンクの場合、または存在しない場合、realpath () は FALSE を返します。

var_dump (realpath (‘./Test.php’));

./Test.php ファイル パスが見つかった場合、出力は次のようになります。

string ‘E: \ Dropbox \ My Dropbox \ code \ php \ test.php’ (length=48)

./path が test.php を見つけるためのシンボリック リンクである場合、出力は次のようになります。

boolean false

./test.php がファイル パスを見つけられない場合、出力は次のようになります。

boolean false

Windows プラットフォームで実行している場合は、実装の結果がコード行の上に表示されます。これは、Windows ではスラッシュ (/) とバックスラッシュ () の両方をディレクトリ区切り文字として使用できるためです。

var_dump (realpath (‘. \ Test.php’));

上記の関数の知識への PHP realpath パスの説明が、すべての人に役立つことを願っています。

キャッシュ:

キャッシュはスレッドごとに維持されるため、特効薬ではありません。

キャッシュのクリア:

キャッシュがクリアされるのはアクティブなスレッドのみで、合計で数十のスレッドが存在する可能性があります (例: php-fpm のインスタンス、または prefork モードの httpd の子)。最も重要なのは、open_basedir を有効にすると、PHP の realpath キャッシュが無効になることです。

Filecache は Web サーバーのローカル ディスクにファイルをキャッシュしますが、すべての stat() 呼び出しを dbstatcache に渡します。Dbstatcache は、クラスター内のすべての Web サーバーからアクセス可能なデータベースに統計情報をキャッシュします (これは、既にキャッシュされているファイルが削除または更新されたかどうかを検出するために必要です)。

于 2013-03-04T05:47:41.157 に答える