Devo controllare se un file si trova su HDD in una posizione specificata ($ path. $ Nome_file).
Quale è la differenza tra is_file()
e file_exists()
funzioni e che è meglio / più veloce per l'uso in PHP?
Devo controllare se un file si trova su HDD in una posizione specificata ($ path. $ Nome_file).
Quale è la differenza tra is_file()
e file_exists()
funzioni e che è meglio / più veloce per l'uso in PHP?
Risposte:
is_file()
restituirà false
se il percorso specificato punta a una directory. file_exists()
restituirà true
se il percorso specificato punta a un file o una directory validi . Quindi dipenderà interamente dalle tue esigenze. Se vuoi sapere nello specifico se si tratta di un file o meno, usa is_file()
. Altrimenti, usa file_exists()
.
is_file()
è il più veloce, ma il benchmark recente mostra che file_exists()
è leggermente più veloce per me. Quindi immagino che dipenda dal server.
Il mio benchmark di prova:
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";
}
Modifica: @Tivie grazie per il commento. Numero di cicli modificato da 1000 a 10k. Il risultato è:
quando il file esiste :
is_file x 10000 1,5651218891144 secondi
file_exists x 10000 1.5016479492188 secondi
is_readable x 10000 3,7882499694824 secondi
quando il file non esiste :
is_file x 10000 0,23920488357544 secondi
file_exists x 10000 0,22103786468506 secondi
is_readable x 10000 0,21929788589478 secondi
Modifica: clearstatcache spostato (); all'interno del ciclo. Grazie CJ Dennis.
is_file()
più veloce di file_exists()
. Se sai che è un file (e non una directory), usalo sicuramente.
is_dir()
risulta essere il 20% più veloce di file_exists()
(cosa che non fa, btw), questa può essere una differenza importante se stai comunque controllando solo le directory ...
Né.
is_file () può restituire true se il file non esiste.
file_exists () può restituire true se il file è una directory.
Quindi, se deve essere un file e deve esistere, allora hai bisogno di entrambi.
La velocità non ha importanza qui perché non sono la stessa cosa. Usane solo una se conta solo una funzione e sarà più veloce.
So che questo post è vecchio ma la differenza tra queste funzioni non è solo il loro comportamento. Se usi is_file () per verificare l'esistenza di file di grandi dimensioni, più di 2 Go. Sarai sorpresa. Il file non esiste. :( Ma se controlli con file_exists (), funziona.