web-dev-qa-db-fra.com

is_file ou file_exists dans PHP

Je dois vérifier si un fichier se trouve sur le disque dur à un emplacement spécifié ($ path. $ File_name).

Quelle est la différence entre les fonctions is_file() et file_exists() et laquelle est meilleure/plus rapide à utiliser en PHP?

111
Duncan Benoit

is_file() renverra false si le chemin donné pointe vers un répertoire. file_exists() renverra true si le chemin donné pointe vers un fichier valide o répertoire. Cela dépendrait donc entièrement de vos besoins. Si vous voulez savoir spécifiquement s'il s'agit d'un fichier ou non, utilisez is_file(). Sinon, utilisez file_exists().

158
hbw

is_file() est le plus rapide, mais un benchmark récent montre que file_exists() est légèrement plus rapide pour moi. Je suppose donc que cela dépend du serveur.

Mon test de référence:

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 merci pour le commentaire. Changement du nombre de cycles de 1000 à 10k. Le résultat est:

  1. lorsque le fichier existe:

    is_file x 10000 1.5651218891144 secondes

    file_exists x 10000 1.5016479492188 secondes

    is_readable x 10000 3.7882499694824 secondes

  2. lorsque le fichier n'existe pas:

    is_file x 10000 0.23920488357544 secondes

    file_exists x 10000 0.22103786468506 secondes

    is_readable x 10000 0.21929788589478 secondes

Modifier: déplacé clearstatcache (); à l'intérieur de la boucle. Merci CJ Dennis.

33
Lamy