Pregunta

Tengo que comprobar si un archivo en el disco duro está en una ubicación especificada ($ camino. $ Nombre_archivo).

¿Cuál es la diferencia entre is_file() y funciones file_exists() y que es mejor / más rápido para usar en PHP?

¿Fue útil?

Solución

is_file() volverá false si la ruta especificada apunta a un directorio. file_exists() volverá true si la ruta especificada apunta a un archivo válido o directorio. Por lo que dependerá por completo de sus necesidades. Si quieres saber específicamente si se trata de un archivo o no, el uso is_file(). De lo contrario, utilice file_exists().

Otros consejos

is_file() es el más rápido, pero la reciente referencia muestra que file_exists() es ligeramente más rápido para mí. Así que supongo que depende del servidor.

Mi prueba de referencia:

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. número cambiado de ciclos de 1000 a 10k. El resultado es:

  1. cuando el archivo existe

    is_file x 10000 1,5651218891144 segundo

    file_exists x 10000 1,5016479492188 segundo

    is_readable x 10000 3,7882499694824 segundo

  2. cuando el archivo no existe

    is_file x 10000 ,23920488357544 segundo

    file_exists x 10000 ,22103786468506 segundo

    is_readable x 10000 ,21929788589478 segundo

Edit: movido clearstatcache (); dentro del bucle. Gracias CJ Dennis.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top