Мені потрібно перевірити, чи файл знаходиться на жорсткому диску у вказаному місці ($ 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,50646479492188 секунд
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 () може повернути true, якщо файл не існує.
file_exists () може повернути true, якщо файл - це каталог.
Отже, якщо він повинен бути файлом і він повинен існувати, то вам потрібно і те, і інше.
Швидкість тут не має значення, оскільки вони не однакові. Використовуйте лише одну, якщо важлива лише одна функція, і вона буде швидшою.
Я знаю, що ця посада стара, але різниця між цими функціями полягає не лише в їх поведінці. Якщо ви використовуєте is_file () для перевірки існування великого файлу, більш ніж 2 Go. Ви будете здивовані. Файл не існує. :( Але якщо ви перевірите файл_exists (), це працює.