Мне нужно проверить, находится ли файл на жестком диске в указанном месте ($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()
.
file_exists()
лучше было бы назвать path_exists()
- person Jay Dadhania; 03.02.2021
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()
. Если вы знаете, что это файл (а не каталог), обязательно используйте его.
- person Jonathan; 14.05.2013
is_dir()
оказывается на 20% быстрее, чем file_exists()
(что, кстати, не так), это может быть важным отличием, если вы все равно проверяете только каталоги...
- person Byson; 13.07.2015
Ни один.
is_file() может вернуть true, если файл не существует.
file_exists() может вернуть true, если файл является каталогом.
Поэтому, если это должен быть файл, и он должен существовать, вам нужны оба.
Скорость здесь не имеет значения, потому что они не одинаковы. Используйте только один, если важна только одна функция, и это будет быстрее.
is_file()
возвращает true
, если файл не существует?
- person fritzmg; 02.09.2020
Я знаю, что этот пост устарел, но разница между этими функциями заключается не только в их поведении. Если вы используете is_file() для проверки существования большого файла, более 2 Go. Вы будете сюрпризом. Файл не существует. :( Но если вы проверите с помощью file_exists(), это сработает.
is_file
будет быстрее, если использовать его с обратной косой чертой: \is_file
. В этом случае PHP обеспечит оптимизацию opcache и file_exists
не будет.