131 votes

is_file ou file_exists en PHP

J'ai besoin de vérifier si un fichier est sur le disque dur à un emplacement spécifié ($chemin.$file_name).

Quelle est la différence entre is_file() et file_exists() fonctions et qui est mieux/rapide à utiliser en PHP?

194voto

htw Points 10312

is_file() sera de retour false si le chemin pointe vers un répertoire. file_exists() sera de retour true si le chemin pointe vers un fichier valide ou répertoire. Donc, il serait dépendent entièrement de vos besoins. Si vous voulez savoir précisément si c'est un fichier ou pas, utilisez is_file(). Sinon, utilisez file_exists().

40voto

Lamy Points 1127

is_file() est le plus rapide, mais de récentes référence montre qu' file_exists() est légèrement plus rapide pour moi. Donc je suppose 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. Changé le 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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X