Is_file или file_exists в PHP

Мне нужно проверить, находится ли файл на жестком диске в указанном месте ($ path. $file_name).

В чем разница между is_file() и file_exists() и что лучше/быстрее использовать в PHP?

Ответ 1

is_file() вернет false, если данный путь указывает на каталог. file_exists() вернет true, если данный путь указывает на действительный файл или каталог. Таким образом, это будет полностью зависеть от ваших потребностей. Если вы хотите узнать, если это файл или нет, используйте is_file(). В противном случае используйте file_exists().

Ответ 2

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. Результат:

  • когда файл существует:

    is_file x 10000 1.5651218891144 секунд

    file_exists x 10000 1.5016479492188 секунд

    is_readable x 10000 3.7882499694824 секунд

  • когда файл не существует:

    is_file x 10000 0.23920488357544 секунд

    file_exists x 10000 0.22103786468506 секунд

    is_readable x 10000 0.21929788589478 секунд

Изменить: перемещен clearstatcache(); внутри цикла. Спасибо CJ Dennis.