существует ли файл или файл в PHP
Мне нужно проверить, находится ли файл на жестком диске в указанном месте ($путь.$имя_файла).
В чем разница между is_file()
и file_exists()
функции и что лучше/быстрее использовать в PHP?
2 answers
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 секунды
Файл_существует x 10000 1.5016479492188 секунд
Is_читаемый x 10000 3,7882499694824 секунды
-
Когда файл не существует:
Is_file x 10000 0,23920488357544 секунды
Файл_существует x 10000 0,22103786468506 секунд
Is_читаемый x 10000 0,21929788589478 секунд
Изменить: переместил clearstatcache(); внутри цикла. Спасибо Си Джею Деннису.