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?
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()
.
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:
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
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.