Ho bisogno di verificare se un file è su HDD in una posizione specificata (percorso $. $ Nome_file).is_file o file_exists in PHP
Qual è la differenza tra le funzioni is_file()
e file_exists()
e quale è meglio/più veloce da utilizzare in PHP?
Ho bisogno di verificare se un file è su HDD in una posizione specificata (percorso $. $ Nome_file).is_file o file_exists in PHP
Qual è la differenza tra le funzioni is_file()
e file_exists()
e quale è meglio/più veloce da utilizzare in PHP?
is_file()
restituirà false
se il percorso indicato punta a una directory. file_exists()
restituirà true
se il percorso indicato punta a una directory di file valida o. Quindi, dipenderebbe interamente dalle tue esigenze. Se si desidera conoscere in particolare se si tratta di un file o meno, utilizzare is_file()
. Altrimenti, utilizzare file_exists()
.
is_file()
è il benchmark più veloce, ma recente mostra che file_exists()
è leggermente più veloce per me. Quindi penso che dipenda dal server.
Il mio test di benchmark:
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 grazie per il commento. Numero di cicli modificato da 1000 a 10k. Il risultato è:
quando il file esiste:
is_file x 10000 1,5651218891144 secondo
file_exists x 10000 1,5016479492188 secondi
is_readable x 10000 3,7882499694824 secondi
quando il file non esiste:
is_file x 10000 ,23920488357544 secondi
file_exists x 10000 ,22103786468506 secondi
is_readable x 10000 ,21929788589478 secondi
Edit: spostati clearstatcache(); all'interno del ciclo. Grazie CJ Dennis.
affinché questo benchmark funzioni, è necessario aggiungere clearstatcache(); poiché i risultati per is_file e file_exist vengono memorizzati nella cache in tutto lo script. Anywhere file_exists() è un po 'più lento, ma non dovrebbe fare alcuna differenza a meno che non si eseguano controlli di file intorno a 100K. http://www.php.net/manual/en/function.clearstatcache.php – Tivie
Anch'io ho trovato 'is_file()' più veloce di 'file_exists()'. Se sai che si tratta di un file (e non di una directory), utilizzalo sicuramente. – Jonathan
Strano, ora sembra che "file_exists" sia più veloce di "is_file". – weynhamz
per quanto ne so, if_file ha esito negativo anche per i collegamenti simbolici, non solo per le directory. – stefs
Ho appena eseguito un test rapido e in effetti risolve il collegamento simbolico. – hbw