128

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

is_file()file_exists()関数の違いはどれですか?PHPで使用する方が良い/速いのはどれですか?

4

5 に答える 5

186

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

于 2009-04-27T10:00:55.473 に答える
39

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 x1000001.5651218891144秒

    file_exists x100001.5016479492188秒

    is_読み取り可能x100003.7882499694824秒

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

    is_file x100000.23920488357544秒

    file_exists x100000.22103786468506秒

    is_読み取り可能x100000.2192988858478秒

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

于 2012-05-09T13:07:58.080 に答える