существует ли файл или файл в PHP


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

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

Author: Alex Shesterov, 2009-04-27

2 answers

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

 143
Author: hbw, 2009-04-27 10:00:55

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 до 10 тыс. В результате получается:

  1. Когда файл существует:

    Is_file x 10000 1,5651218891144 секунды

    Файл_существует x 10000 1.5016479492188 секунд

    Is_читаемый x 10000 3,7882499694824 секунды

  2. Когда файл не существует:

    Is_file x 10000 0,23920488357544 секунды

    Файл_существует x 10000 0,22103786468506 секунд

    Is_читаемый x 10000 0,21929788589478 секунд

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

 32
Author: Lamy, 2014-03-10 07:00:47