web-dev-qa-db-ja.com

is_fileまたはfile_exists in PHP

ファイルが指定された場所($ path。$ file_name)のHDDにあるかどうかを確認する必要があります。

is_file()file_exists() 関数の違いはどれですか

111
Duncan Benoit

is_file()は、指定されたパスがディレクトリを指す場合、falseを返します。 file_exists()は、指定されたパスが有効なファイルを指している場合にtrueを返しますまたはディレクトリ。したがって、それはあなたのニーズに完全に依存します。 具体的にファイルかどうかを知りたい場合は、is_file()を使用してください。それ以外の場合は、file_exists()を使用します。

158
hbw

is_file()が最速ですが、最近のベンチマークでは、file_exists()が少し速いことが示されています。だから、サーバーに依存すると思います。

私のテストベンチマーク:

benchmark('is_file');
benchmark('file_exists');
benchmark('is_readable');

function benchmark($funcName) {
    $numCycles = 10000;
    $time_start = microtime(true);
    for ($i = 0; $i < $numCycles; $i++) {
        clearstatcache();
        $funcName('path/to/file.php'); // or 'path/to/file.php' instead of __FILE__
    }
    $time_end = microtime(true);
    $time = $time_end - $time_start;
    echo "$funcName x $numCycles $time seconds <br>\n";
}

編集:@Tivie、コメントありがとう。サイクル数を1000から10kに変更しました。結果は次のとおりです。

  1. ファイル存在するの場合:

    is_file x 10000 1.5651218891144秒

    file_exists x 10000 1.5016479492188秒

    is_readable x 10000 3.7882499694824秒

  2. ファイル存在しない:の場合

    is_file x 10000 0.23920488357544秒

    file_exists x 10000 0.22103786468506秒

    is_readable x 10000 0.21929788589478秒

編集:clearstatcache()を移動しました;ループ内。 CJデニスに感謝します。

33
Lamy