113 votes

PHP : Comment vérifier si le fichier image existe ?

J'ai besoin de voir si une image spécifique existe sur mon cdn.

J'ai essayé ce qui suit et cela ne fonctionne pas :

if (file_exists(http://www.example.com/images/$filename)) {
    echo "The file exists";
} else {
    echo "The file does not exist";
}

Même si l'image existe ou n'existe pas, il est toujours indiqué "Le fichier existe". Je ne sais pas pourquoi ça ne fonctionne pas...

1 votes

Vous devez utiliser le chemin d'accès complet au fichier dans le système de fichiers de votre serveur (par exemple, '/home/you/public/img/sample.gif').

0 votes

Soyez prudent avec cela car vous pourriez trouver que faire un file_exists à un endroit éloigné sera très lent.

142voto

knittl Points 64110

Vous avez besoin du nom de fichier entre guillemets au moins (comme chaîne de caractères) :

if (file_exists('http://www.mydomain.com/images/'.$filename)) {
 … }

Assurez-vous également $filename est correctement validé. Et ensuite, cela ne fonctionnera que si allow_url_fopen est activé dans votre configuration PHP

5 votes

J'ai pu le faire avec succès en utilisant @GetImageSize. Cependant, qu'est-ce qui sera moins gourmand en serveur ?

10 votes

File_exists() doit utiliser un chemin d'accès au fichier sur le disque dur, et non une URL Cette réponse n'est pas utile pour moi, elle ne devrait pas être acceptée.

0 votes

De PHP : bool file_exists ( string $filename ) A partir de PHP 5.0.0, cette fonction peut aussi être utilisée avec certains wrappers URL. Reportez-vous à la section Protocoles et wrappers supportés pour déterminer quels wrappers supportent les fonctionnalités de la famille stat().

128voto

Jeffrey Jenkinson Points 560
if (file_exists('http://www.mydomain.com/images/'.$filename)) {}

Cela n'a pas fonctionné pour moi. La façon dont je l'ai fait était d'utiliser getimagesize.

$src = 'http://www.mydomain.com/images/'.$filename;

if (@getimagesize($src)) {

Notez que le "@" signifie que si l'image n'existe pas (dans ce cas, la fonction renvoie généralement une erreur) : getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed ), il retournera false.

1 votes

If (@getimagesize($src)) {fonctionne à merveille, merci, merci aussi pour l'explication de @ ici

1 votes

Getimagesize() fonctionne, mais veillez à inclure le protocole dans l'URI (par exemple, @getimagesize('//path/to/image.jpg') ne fonctionnera pas).

0 votes

File_exists ou is_file ne fonctionnaient pas pour moi, ceci a fonctionné. merci !

15voto

pinaldesai Points 1191

Essayez comme ça :

$file = '/path/to/foo.txt'; // 'images/'.$file (physical path)

if (file_exists($file)) {
    echo "The file $file exists";
} else {
    echo "The file $file does not exist";
}

14voto

Rizerzero Points 66

Bien, file_exists ne dit pas si un fichier existe, il dit si une le chemin existe .

Donc, pour vérifier si c'est un fichier, vous devez utiliser is_file en même temps que file_exists pour savoir s'il y a vraiment un fichier derrière le chemin, sinon file_exists retournera true pour tout chemin existant.

Voici la fonction que j'utilise :

function fileExists($filePath)
{
      return is_file($filePath) && file_exists($filePath);
}

2 votes

Comment peut-il y avoir un chemin existant, mais le fichier n'existe pas, alors que le chemin contient le nom du fichier ?

1 votes

Je veux dire que cela fonctionne même si l'utilisateur donne un chemin et non un fichier, la fonction renvoie vrai même si ce n'est pas un fichier mon ami.

0 votes

Une différenciation intéressante et potentiellement importante à faire. Mais si vous vérifiez la documentation, il semble que vous ne devez utiliser is_file que dans ce but, et non en conjonction avec file_exists.

8voto

Une chose que vous devez d'abord comprendre : vous n'avez pas de fichiers .
Un dossier est le sujet d'un système de fichiers mais vous faites votre demande en utilisant le protocole HTTP qui ne prend pas en charge les fichiers mais les URL.

Donc, vous devez demander un fichier non existant en utilisant votre navigateur et voir le code de réponse. Si ce n'est pas 404, vous ne pouvez pas utiliser de wrappers pour voir si un fichier existe et vous devez demander votre cdn en utilisant un autre protocole, FTP par exemple.

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