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.