Muszę sprawdzić, czy plik znajduje się na dysku twardym w określonej lokalizacji ($ path. $ File_name).
Który jest różnicą pomiędzy is_file()
i file_exists()
funkcji i co jest lepsze / szybsze do użytku w PHP?
Muszę sprawdzić, czy plik znajduje się na dysku twardym w określonej lokalizacji ($ path. $ File_name).
Który jest różnicą pomiędzy is_file()
i file_exists()
funkcji i co jest lepsze / szybsze do użytku w PHP?
Odpowiedzi:
is_file()
zwróci, false
jeśli podana ścieżka wskazuje na katalog. file_exists()
zwróci, true
jeśli podana ścieżka wskazuje na prawidłowy plik lub katalog. Więc to zależy całkowicie od twoich potrzeb. Jeśli chcesz wiedzieć konkretnie , czy jest to plik lub nie, użyj is_file()
. W przeciwnym razie użyj file_exists()
.
is_file()
jest najszybszy, ale ostatnie testy porównawcze pokazują, że file_exists()
jest dla mnie nieco szybszy. Więc myślę, że to zależy od serwera.
Mój test porównawczy:
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";
}
Edycja: @Tivie dzięki za komentarz. Zmieniono liczbę cykli z 1000 na 10k. Wynik to:
kiedy plik istnieje :
is_file x 10000 1,5651218891144 sekund
file_exists x 10000 1,5016479492188 sekund
is_readable x 10000 3,7882499694824 sekundy
gdy plik nie istnieje :
is_file x 10000 0,23920488357544 sekund
file_exists x 10000 0,22103786468506 sekund
is_readable x 10000 0,21929788589478 sekund
Edycja: przeniesiono clearstatcache (); wewnątrz pętli. Dzięki CJ Dennis.
is_file()
szybciej niż file_exists()
. Jeśli wiesz, że to plik (a nie katalog), zdecydowanie użyj go zamiast tego.
is_dir()
okaże się, że jest 20% szybszy niż file_exists()
(a przy okazji nie jest), może to być istotna różnica, jeśli i tak sprawdzasz tylko
Ani.
is_file () może zwrócić prawdę, jeśli plik nie istnieje.
file_exists () może zwrócić prawdę, jeśli plik jest katalogiem.
Więc jeśli musi to być plik i musi istnieć, potrzebujesz obu.
Szybkość nie ma tutaj znaczenia, ponieważ nie są takie same. Użyj tylko jednej, jeśli tylko jedna funkcja ma znaczenie, a będzie szybsza.
Wiem, że ten post jest stary, ale różnica między tymi funkcjami to nie tylko ich zachowanie. Jeśli używasz is_file () do sprawdzenia istnienia dużego pliku, więcej niż 2 Go. Będziesz zaskoczony. Plik nie istnieje. :( Ale jeśli sprawdzisz za pomocą file_exists (), to działa.