muszę sprawdzić, czy plik jest na dysku twardym w określonej lokalizacji ($ ścieżką. $ Nazwa_pliku).is_file lub file_exists w PHP
Jaka jest różnica między funkcjami i file_exists()
i która jest lepsza/szybsza w użyciu w PHP?
muszę sprawdzić, czy plik jest na dysku twardym w określonej lokalizacji ($ ścieżką. $ Nazwa_pliku).is_file lub file_exists w PHP
Jaka jest różnica między funkcjami i file_exists()
i która jest lepsza/szybsza w użyciu w PHP?
is_file()
powróci false
jeżeli dana ścieżka wskazuje na katalog. file_exists()
powróci true
jeżeli dana ścieżka wskazuje na prawidłowy plik lub katalogu. Więc to zależy wyłącznie od twoich potrzeb. Jeśli chcesz wiedzieć konkretnie jeśli jest to plik lub nie, użyj is_file()
. W przeciwnym razie użyj file_exists()
.
is_file()
to najszybszy, ale niedawny benchmark pokazuje, że file_exists()
jest dla mnie nieco szybszy. Więc myślę, że to zależy od serwera.
Moja testów:
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";
}
Edit: @Tivie dzięki za komentarz. Zmieniono liczbę cykli z 1000 na 10k. Wynikiem jest:
gdy plik istnieje:
is_file x 10000 1,5651218891144 sekund
file_exists x 10000 1,5016479492188 sekund
is_readable x 10000 3,7882499694824 sekund
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: przeniesiony clearstatcache(); wewnątrz pętli. Dzięki CJ Dennis.
w celu odniesienia do tego, aby pracować, należy dodać clearstatcache(); ponieważ wyniki dla pliku is_file i file_exists są buforowane w całym skrypcie. Anyways file_exists() jest nieco wolniejszy, ale nie powinno robić żadnej różnicy, chyba że wykonasz około 100K kontroli plików. http://www.php.net/manual/en/function.clearstatcache.php – Tivie
Również znalazłem 'is_file()' szybciej niż 'file_exists()'. Jeśli wiesz, że to plik (a nie katalog), zdecydowanie używaj go zamiast tego. – Jonathan
Dziwne, teraz wygląda na to, że 'file_exists' jest szybszy niż 'is_file'. – weynhamz
O ile mi wiadomo, nie if_file również dowiązania symboliczne, nie tylko katalogów. – stefs
Po prostu uruchomiłem szybki test, który rzeczywiście rozwiązuje dowiązanie symboliczne. – hbw