Мне нужно проверить, находится ли файл на жестком диске в указанном месте ($ path. $ File_name).
Какая разница между is_file()
и file_exists()
функциями и которые лучше / быстрее использовать в PHP?
Мне нужно проверить, находится ли файл на жестком диске в указанном месте ($ path. $ File_name).
Какая разница между is_file()
и file_exists()
функциями и которые лучше / быстрее использовать в PHP?
Ответы:
is_file()
вернется, false
если данный путь указывает на каталог. file_exists()
вернется, true
если указанный путь указывает на допустимый файл или каталог. Так что это будет полностью зависеть от ваших потребностей. Если вы хотите знать , в частности , если это файл или нет, использование is_file()
. В противном случае используйте file_exists()
.
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к. Результат:
когда файл существует :
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.
is_file()
быстрее чем file_exists()
. Если вы знаете, что это файл (а не каталог), определенно используйте его.
is_dir()
окажется, что он на 20% быстрее, чем file_exists()
(а это не так, кстати), это может быть важной разницей, если вы все равно проверяете только каталоги ...
Ни.
is_file () может вернуть истину, если файл не существует.
file_exists () может вернуть true, если файл является каталогом.
Так что, если это должен быть файл и он должен существовать, вам понадобятся оба.
Скорость здесь не имеет значения, потому что они разные. Используйте только одну, если важна только одна функция, и она будет быстрее.
Я знаю, что этот пост старый, но разница между этими функциями не только в их поведении. Если вы используете is_file () для проверки существования большого файла, более 2 Go. Вы будете удивлены. Файл не существует. :( Но если вы проверите с помощью file_exists (), это работает.