Page 1 sur 2

fichier existant

Posté : 25 oct. 2007, 22:21
par Sebe
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

Posté : 25 oct. 2007, 22:28
par Tracker
Salut,

file_exists(...) peut-être ?


Tracker.

Re: fichier existant

Posté : 25 oct. 2007, 22:29
par Hubert Roksor
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.

Posté : 26 oct. 2007, 00:05
par Sebe
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

Posté : 26 oct. 2007, 01:06
par Tracker
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.

Posté : 26 oct. 2007, 08:56
par Sebe
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

Posté : 26 oct. 2007, 08:59
par Sebe
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

Posté : 26 oct. 2007, 10:16
par Ryle
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)

Posté : 26 oct. 2007, 12:18
par Sebe
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

Posté : 26 oct. 2007, 12:29
par Ryle
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 :)

Posté : 26 oct. 2007, 12:44
par Tracker
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.

Posté : 26 oct. 2007, 13:18
par Sebe
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

Posté : 26 oct. 2007, 13:47
par Tracker
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.

Posté : 26 oct. 2007, 15:11
par Sebe
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

Posté : 26 oct. 2007, 15:14
par Tracker
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.