fichier existant

Mammouth du PHP | 545 Messages

25 oct. 2007, 22:21

Bonjour,

Je voudrais savoir s'il est possible de tester si un fichier existe ou pas.

L'objectif est de faire une fiche d'identité avec photo. Celle-ci serait importé dans un dossier et porterait le nom et prénom de la personne concernée (ex: dupont-andre.jpg). Oui mais si la photo n'existe pas, je voudrais que la fiche existe quand même mais avec un fichier par défaut (ex: anonymus.jpg):
<?php
$nom = 'dupont';
$prenom = 'andre';
$photo = $nom . '-' . $prenom . '.jpg';

if ($photo EXISTE) {
    $who = $photo;
    } else {
    $who = 'anonymus.jpg';
        }
?>

<img src="<?php echo $url . '/components/com_classement/photos/' . $who;?>" width="150" title="<?php echo $nom . ' ' . $prenom;?>" border = "1"/>
Est-ce possible ? Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 443 Messages

25 oct. 2007, 22:28

Salut,

file_exists(...) peut-être ?


Tracker.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

25 oct. 2007, 22:29

C'est facile, toutes les fonctions de fichier sont sur http://php.net/manual/ref.filesystem.php

N'oublie pas que le manuel est la source numéro 1 d'information sur PHP.

Mammouth du PHP | 545 Messages

26 oct. 2007, 00:05

Merci pour vos réponses mais cela ne fonctionne pas comme attendu !

Quand je fais ceci :
<?php
$photo = '../components/com_classement/photos/' . $runner->nom . $runner->prenom . '.jpg';
?>
<img src="<?php echo $photo;?>" width="150" title="<?php echo $runner->nom . ' ' . $runner->prenom;?>" border = "1"/>
La photo s'affiche correctement

Mais si j'ajoute la condition
if (file_exists($photo)){
	  	echo 'le fichier existe';
		} else {
		echo 'le fichier n'existe pas !';
		}
cela ne fonctionne pas comme attendu puisque
le fichier n'existe pas !
Qu'est-ce qui arrive ?

Merci
Modifié en dernier par Sebe le 26 oct. 2007, 08:52, modifié 1 fois.
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 443 Messages

26 oct. 2007, 01:06

Re,

$photo, à priori ne contient que le nom de ton image, le serveur ne va pas trouver tout seul où tu l'as mise. Donne le chemin de l'image (relatif ou non) à file_exists(...)


Tracker.

Mammouth du PHP | 545 Messages

26 oct. 2007, 08:56

Salut,

J'ai essayé ceci:
if (file_exists('http://www.kain-buyere.be/components/com_classement/photos/' . 'DEVOS' . 'SEBASTIEN' . '.jpg')){
	echo 'le fichier existe';
	} else {
	echo 'le fichier n\'existe pas !';
	}
et le fichier n'existe toujours pas !

J'espère que c'était bien cela que Tracker me demandait de faire

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Mammouth du PHP | 545 Messages

26 oct. 2007, 08:59

Je viens d'essayer les minuscules pour le nom du fichier au cas où ... non, ce n'est pas cela non plus !

J'ai tout mis à la queue, juste pour voir, en virant les apostrophe et les remplaçant par des guillemets:
if (file_exists("http://www.kain-buyere.be/components/com_classement/photos/devossebastien.jpg")){
echo 'le fichier existe';
} else {
echo 'le fichier n\'existe pas !';
}
Mais non, c'est pas cela pourtant si vous tapez l'url, on tombe bien sur une photo !

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 oct. 2007, 10:16

hmm... le chemin relatif devrait fonctionner... l'url globale ne fonctionnera qu'avec php 5, les protocoles n'étant pas supportés avant ... par contre le pourquoi ça ne fonctionne pas, c'est peut être le safe mode qui est activé ?

dans tous les cas respecte la casse des lettres (majuscules/minuscules) dans les noms des dossiers et dans ceux des fichiers (windows y est insensible, mais c'est pas une raison ;))

Le chemin relatif "../components/com_classement/photos/" est-il correct (ce chemin doit être relatif au script qui utilise la fonction, donc attention aux includes)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 545 Messages

26 oct. 2007, 12:18

Salut,
hmm... le chemin relatif devrait fonctionner... l'url globale ne fonctionnera qu'avec php 5, les protocoles n'étant pas supportés avant ... par contre le pourquoi ça ne fonctionne pas, c'est peut être le safe mode qui est activé ?
Alors là ! ? ! Je ne sais même pas de quoi tu parles ... safe mode ???
dans tous les cas respecte la casse des lettres (majuscules/minuscules) dans les noms des dossiers et dans ceux des fichiers (windows y est insensible, mais c'est pas une raison ;))
J'ai bien respecté la casse depuis le début ... j'ai juste remis en minuscule le nom du fichier et l'appel au cas où !
Le chemin relatif "../components/com_classement/photos/" est-il correct (ce chemin doit être relatif au script qui utilise la fonction, donc attention aux includes)
Oui, il est correcte ... je sais afficher la photo quand je ne teste pas l'existence du fichier !

En tout cas merci pour votre aide
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 oct. 2007, 12:29

Le "Safe Mode" est le mode de sécurité de PHP pour limiter certaines fonctions et restreindre les accès aux fichiers ou url, initialement pour raison de sécurité : http://us2.php.net/safemode

Pour le chemin relatif, je posais la question car le chemin dans le système de fichier n'est pas nécessairement le même que celui de l'url (avec d'éventuel rewrite engine, ou simplement un include qui ne serait pas au même endroit que le script parent). Donc ce n'est pas parce que l'image s'affiche dans ta page qu'elle est nécessairement au même endroit sur le serveur, d'où ma question :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 443 Messages

26 oct. 2007, 12:44

Pour le chemin relatif, je posais la question car le chemin dans le système de fichier n'est pas nécessairement le même que celui de l'url (avec d'éventuel rewrite engine, ou simplement un include qui ne serait pas au même endroit que le script parent).
+1
Sauf que '../' pointe sur le même dossier quelque soit la position du fichier inclus (c'est relatif par rapport au script appelé GET ou POST). Donc resterait plus que la réécriture d'URL ??

Sebe, pourrais-tu exécuter la code suivant et comparer le résultat au chemin physique de ton fichier sur le serveur ?
echo realpath('../com_classement/photos/devossebastien.jpg');

Tracker.

Mammouth du PHP | 545 Messages

26 oct. 2007, 13:18

Sebe, pourrais-tu exécuter la code suivant et comparer le résultat au chemin physique de ton fichier sur le serveur ?
echo realpath('../com_classement/photos/devossebastien.jpg');
Il n'y a strictement rien qui s'affiche voir ici
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 443 Messages

26 oct. 2007, 13:47

Re,

Affiche simplement,
echo realpath('.');
Pour savoir où tu es sur le serveur.

Dans la doc (ça confirme ton problème)
realpath() retourne FALSE si une erreur survient, e.g. si le fichier n'existe pas. Sous les systèmes BSD, realpath() n'échouera pas s'il manque que le dernier composant du paramètre path, alors que les autres systèmes retourneront FALSE.

Tracker.

Mammouth du PHP | 545 Messages

26 oct. 2007, 15:11

Rere :lol: ,
Affiche simplement,
echo realpath('.');
Pour savoir où tu es sur le serveur.
Voici le retour:
/home.2/kainbuye/www
Qu'est-ce que je dois en conclure ?

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 443 Messages

26 oct. 2007, 15:14

Rere :lol: ,
Affiche simplement,
echo realpath('.');
Pour savoir où tu es sur le serveur.
Voici le retour:
/home.2/kainbuye/www
Qu'est-ce que je dois en conclure ?

Merci
Ben que tu cherches ton image ici:

Code : Tout sélectionner

/home.2/kainbuye/com_classement/photos/devossebastien.jpg
Y est-elle ?


Tracker.