Necesito verificar si un archivo está en el disco duro en una ubicación específica ($ ruta. $ Nombre_archivo).
¿Cuál es la diferencia entre is_file()
y file_exists()
funciones y que es mejor / más rápido para su uso en PHP?
Necesito verificar si un archivo está en el disco duro en una ubicación específica ($ ruta. $ Nombre_archivo).
¿Cuál es la diferencia entre is_file()
y file_exists()
funciones y que es mejor / más rápido para su uso en PHP?
Respuestas:
is_file()
volverá false
si la ruta indicada apunta a un directorio. file_exists()
volverá true
si la ruta indicada apunta a un archivo o directorio válido . Entonces dependería completamente de tus necesidades. Si desea saber específicamente si es un archivo o no, use is_file()
. De lo contrario, utilice file_exists()
.
is_file()
es el más rápido, pero el índice de referencia reciente muestra que file_exists()
es un poco más rápido para mí. Entonces supongo que depende del servidor.
Mi punto de referencia de prueba:
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";
}
Editar: @Tivie gracias por el comentario. Se cambió el número de ciclos de 1000 a 10k. El resultado es:
cuando el archivo existe :
is_file x 10000 1.5651218891144 segundos
file_exists x 10000 1.5016479492188 segundos
is_readable x 10000 3,7882499694824 segundos
cuando el archivo no existe :
is_file x 10000 0.23920488357544 segundos
file_exists x 10000 0.22103786468506 segundos
is_readable x 10000 0,21929788589478 segundos
Editar: movió clearstatcache (); dentro del bucle. Gracias CJ Dennis.
is_file()
más rápido que file_exists()
. Si sabe que es un archivo (y no un directorio), definitivamente utilícelo en su lugar.
is_dir()
resulta ser un 20% más rápido que file_exists()
(lo cual no es así, por cierto), puede ser una diferencia importante si solo está buscando directorios de todos modos ...
Ninguno.
is_file () puede devolver verdadero si el archivo no existe.
file_exists () puede devolver verdadero si el archivo es un directorio.
Entonces, si necesita ser un archivo y debe existir, entonces necesita ambos.
La velocidad no importa aquí porque no son lo mismo. Use solo una si solo una función importa y será más rápida.
Sé que esta publicación es antigua, pero la diferencia entre estas funciones no es solo su comportamiento. Si usa is_file () para verificar la existencia de un archivo grande, más de 2 Go. Te sorprenderás. El archivo no existe. :( Pero si verifica con file_exists (), eso funciona.