Comment vérifier si le fichier existe en PHP

PHPz
Libérer: 2023-08-26 12:32:02
original
1754 Les gens l'ont consulté

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.

Importance de vérifier si un fichier existe

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.

Vérifiez si le fichier existe en PHP

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.';
}

?>
Copier après la connexion
sortir
The file "squares.txt" exists.
"squares.txt" is indeed a file.
"squares.zip" turned out to be a directory.
Copier après la connexion

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.

Vérifiez si le fichier existe et est lisible et inscriptible

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.'".';
}

?>
Copier après la connexion
sortir
We can read "squares.txt". 
We can also modify the contents of "squares.txt".
Copier après la connexion

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.

Méfiez-vous des résultats mis en cache

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(),

et 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。另一方面,对于第一次调用期间存在的文件,该函数将继续返回 trueCache uniquement les résultats pour les fichiers qui existent déjà. Cela signifie que pour un fichier qui n'existe pas, la fonction

est appelée, même si le fichier a été supprimé.

<?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.';
}

?>
Copier après la connexion
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.
Copier après la connexion

要记住的另一件事是,调用 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal