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 is_file()
et file_exists()
fonctions et ce qui est mieux / plus rapide à utiliser en 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 is_file()
et file_exists()
fonctions et ce qui est mieux / plus rapide à utiliser en PHP?
Réponses:
is_file()
retournera false
si le chemin indiqué pointe vers un répertoire. file_exists()
retournera true
si le chemin indiqué pointe vers un fichier ou un répertoire valide . Cela dépendrait donc entièrement de vos besoins. Si vous voulez savoir précisément s'il s'agit d'un fichier ou non, utilisez is_file()
. Sinon, utilisez file_exists()
.
is_file()
est la référence la plus rapide, mais récente, qui 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. 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
Edit: déplacé clearstatcache (); à l'intérieur de la boucle. Merci CJ Dennis.
is_file()
plus vite que file_exists()
. Si vous savez que c'est un fichier (et non un répertoire), utilisez-le à la place.
is_dir()
s'avère être 20% plus rapide que file_exists()
(ce qui n'est pas le cas, au fait), cela peut être une différence importante si vous ne vérifiez que les dirs de toute façon ...
Ni.
is_file () peut retourner true si le fichier n'existe pas.
file_exists () peut retourner true si le fichier est un répertoire.
Donc, s'il doit s'agir d'un fichier et qu'il doit exister, vous avez besoin des deux.
La vitesse n'a pas d'importance ici car ce ne sont pas les mêmes. N'utilisez qu'une seule fonction si une seule fonction compte et ce sera plus rapide.
Je sais que cet article est ancien mais la différence entre ces fonctions n'est pas seulement leurs comportements. Si vous utilisez is_file () pour vérifier l'existence d'un gros fichier, plus de 2 Go. Vous serez surpris. Le fichier n'existe pas. :( Mais si vous vérifiez avec file_exists (), cela fonctionne.
is_file
serait plus rapide si l' utilisation avec la barre oblique inverse: \is_file
. Dans ce cas, PHP fournira une optimisation opcache non file_exists
plus.