Maison >développement back-end >tutoriel php >Comment vérifier si le fichier existe en PHP
Souvent, vous devez déplacer des fichiers en PHP ou y stocker des données. Dans les deux cas, savoir à l’avance si le fichier existe peut nous aider à éviter certains comportements inattendus.
PHP est livré avec une variété de fonctions pour gérer différents types de requêtes liées aux fichiers. Dans ce tutoriel, je vais vous donner un bref aperçu de toutes ces fonctionnalités afin que vous puissiez choisir celle qui convient le mieux à votre situation.
Dans de nombreux cas, il peut être important de vérifier si un fichier existe avant d'effectuer d'autres opérations. Supposons que votre site Web permette aux utilisateurs de télécharger des fichiers image sur votre serveur pour un accès ultérieur. Il est juste de supposer que si de nombreux utilisateurs utilisent votre service pour télécharger fréquemment plusieurs fichiers, il existe toujours un risque de conflits de noms de fichiers.
Dans ce cas, il devient important de vérifier si un autre fichier existe déjà à l'emplacement où vous souhaitez enregistrer le fichier le plus récemment téléchargé par l'utilisateur. Vous pouvez ensuite choisir de prendre des mesures telles que renommer le fichier en quelque chose d'autre ou faire savoir aux utilisateurs que leur téléchargement écrasera le fichier existant.
Considérons un autre scénario dans lequel vous devez ajouter des données à un fichier en PHP. Si le fichier que vous avez créé pour écrire toutes vos données est supprimé pour une raison quelconque, une fonction comme file_put_contents()
créera simplement un nouveau fichier avec le nom spécifié et stockera vos données dans le fichier nouvellement créé. Cela peut être souhaitable dans certains cas, mais ce n’est pas toujours le cas. Donc, si vous vous attendez déjà à ce que le fichier existe avant de commencer à écrire des données, il est logique de vérifier si le fichier existe à l'avance.
Vous pouvez utiliser trois fonctions différentes pour vérifier si un fichier existe en PHP.
La première fonction est file_exists()
. Cette fonction accepte un paramètre, qui est le chemin où se trouve le fichier. N'oubliez pas que cela renvoie vrai pour les fichiers et répertoires existants. Cela peut être suffisant ou non pour vos besoins.
Si vous voulez vous assurer que le chemin que vous spécifiez pointe vers un fichier et non vers un répertoire, pensez à utiliser la fonction is_file()
函数。同样,您可以使用 is_dir()
pour vérifier si le chemin que vous spécifiez existe et pointe vers un répertoire.
<?php $name = "squares.txt"; $directory = "squares.zip"; if(file_exists($name)) { echo 'The file "'.$name.'" exists.'; } if(is_file($name)) { echo '"'.$name.'" is indeed a file.'; } if(is_dir($directory)) { echo '"'.$directory.'" turned out to be a directory.'; } ?>sortir
The file "squares.txt" exists. "squares.txt" is indeed a file. "squares.zip" turned out to be a directory.
Dans l'exemple ci-dessus, j'ai intentionnellement nommé l'un des répertoires squares.zip pour montrer qu'il est important de faire vos propres vérifications et de ne pas supposer que le nom de fichier fourni est en réalité un nom de fichier ou un répertoire.
Il est important de se rappeler, is_file()
和 is_dir()
都将返回 false
, que le chemin existe réellement même si le répertoire parent ne dispose pas des autorisations appropriées.
Deux autres fonctions nommées is_read()
和 is_writable()
peuvent être utilisées pour obtenir des informations supplémentaires sur le fichier en plus de vérifier s'il existe.
Comme son nom l'indique, la fonction is_read()
函数将检查两件事:第一,文件或目录确实存在,第二,文件可读。同样, is_writable()
vérifie également deux choses : que le fichier ou le répertoire existe et est accessible en écriture.
<?php $name = "squares.txt"; if(is_readable($name)) { echo 'We can read "'.$name.'".'; } if(is_writable($name)) { echo 'We can also modify the contents of "'.$name.'".'; } ?>sortir
We can read "squares.txt". We can also modify the contents of "squares.txt".
Je vous suggère d'être prudent lors de l'interprétation des valeurs de retour de ces deux fonctions. Par exemple, lorsque is_read()
renvoie false, notre premier réflexe est de penser que le fichier que nous interrogeons est illisible. Cependant, cette fonction renvoie également false si le fichier n'existe pas. Il est important de toujours garder cet aspect de ces fonctionnalités à l’esprit.
Valeurs de retour renvoyées en appelant les cinq fonctions, à savoir file_exists()
、is_file()
、is_dir()
、is_read()
和is_writeable()
—已缓存。这意味着重复调用函数(例如 is_file()
, is_file()
, is_dir()
,
is_writeable()
— Mis en cache. Cela signifie que les appels répétés à une fonction (telle que is_file()
) peuvent afficher des résultats obsolètes. PHP met en cache les résultats de ces fonctions pour améliorer les performances. Cela garantit que plusieurs appels interrogeant le même fichier s’exécutent plus rapidement. Cependant, même si les fichiers changent lors de l'exécution du script, leurs valeurs de retour resteront les mêmes.
is_file()
将继续返回 false
,但一旦创建文件,就会开始返回 true
。另一方面,对于第一次调用期间存在的文件,该函数将继续返回 true
Cache uniquement les résultats pour les fichiers qui existent déjà. Cela signifie que pour un fichier qui n'existe pas, la fonction
<?php $name = "squares.txt"; if(is_file($name)) { echo '"'.$name.'" is indeed a file.'; } // Manually delete the file while script waits. sleep(5); if(is_file($name)) { echo '"'.$name.'" is indeed a file.'; } clearstatcache(); if(is_file($name)) { echo '"'.$name.'" is indeed a file.'; } else { echo 'The file probably no longer exists.'; } ?>
is_file()
仍将返回 true
。不过,在再次查询文件是否存在之前,只需调用 clearstatcache()
Si vous exécutez l'extrait ci-dessus sur un fichier qui existe réellement, puis que vous le supprimez manuellement pendant que le script attend, l'appel de vous donnera les résultats corrects. 🎜
输出
"squares.txt" is indeed a file. "squares.txt" is indeed a file. The file probably no longer exists.
要记住的另一件事是,调用 unlink()
会自动清除缓存,因此稍后调用 is_file()
等函数时会得到新的结果。
本教程首先介绍了检查 PHP 中文件是否存在的重要性。之后,我们了解了可用于检查 PHP 中文件是否存在的不同函数。我们还了解了其中一些功能可能具有的优点和缺点。
正如我在最后提到的,PHP 将缓存其中一些函数调用的结果以提高性能。因此,请确保在对这些文件执行重要操作之前清除缓存。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!