Page 1 sur 2

Problème PHP fonction file_exists

Posté : 05 août 2009, 13:52
par Manuwaza
Bonjour à tous.
Je me permets de vous soumettre un problème auquel je suis confronté et qui commence sérieusement à me faire douter de mes capacités en PHP.
J'utilise une fonction file_exists afin de tester l'existence de fichiers image et de les afficher uniquement s'ils sont présents (utile pour éviter les petites croix rouges sous IE). Jusqu'ici, tout allait bien avec ce code (simplifié pour poster ici) :

Code : Tout sélectionner

$i=2; while($i<=29) { $nomfichier="images_dossiers/".$donnees['titre_article'].$i."m.jpg"; if (file_exists($nomfichier)) { echo'existe'; } else { echo'probleme'; } $i++; }
Seulement, j'ai entrepris de bouger le site dans un sous-dossier, tout en laissant les images à la racine. Et c'est là que les ennuis ont commencé. J'étais persuadé qu'il me suffisait de rajouter un slash devant images_dossier afin que le code aille chercher les images à partir de la racine. Seulement, celà ne semble pas fonctionner avec la fonction file_exists. Code :

Code : Tout sélectionner

$i=2; while($i<=29) { $nomfichier="/images_dossiers/".$donnees['titre_article'].$i."m.jpg"; if (file_exists($nomfichier)) { echo'existe'; } else { echo'probleme'; } $i++; }
J'ai testé l'affichage des images en php simple, sans la condition, et le slash ne pose aucun problème. J'ai également fait un echo de ma variable $nom_fichier, qui me retourne le bon truc. J'ai également testé avec l'url complète sans résultat... file_exists s'obstine à m'afficher "probleme"...
Voilà, étant un peu à cours d'idées, j'espère trouver quelqu'un pour m'aider. Merci d'avance pour vos réponses. Cordialement

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 14:06
par niuxe
Hello,

Est ce que tu as essayé d'écrire en dur le lien dans un éléments img ? Est ce qu'il y a un affichage ? D'une manière générale, un lien relatif dans un autre dossier, s'écrit comme ceci :
$lienRelatif = ../unDossier/uneImage.jpg

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 14:22
par Manuwaza
Salut et merci pour ta réponse :)
Oui, j'ai effectivement essayé de mettre le lien directement vers une image :

$nomfichier="/images_dossiers/titre_article.jpg";
Même verdict...
EDIT : je crois que c'est réglé... Je ne savais pas qu'il fallait mettre deux points avant le slash :)
Du coup, j'aimerais comprendre pourquoi les deux points ne sont nécessaire qu'ici, étant donné que d'habitude le slash suffit?
Merci à toi en tout cas :)

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 14:59
par niuxe
... Du coup, j'aimerais comprendre pourquoi les deux points ne sont nécessaire qu'ici, étant donné que d'habitude le slash suffit? ...
Tout simplement que cette manière d'écrire est fausse. ;) Comment écrirais tu si la cible est deux dossiers au dessus (ceci : ../../unDossier/uneImage.jpeg ou cela : //unDossier/uneImage.jpeg) ? ;)

++

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 15:04
par Manuwaza
Je pensais que le / renvoyait directement à la racine. Dans ce cas, pourquoi le code suivant marche-t-il?

Code : Tout sélectionner

echo '<img src='.'"/images_dossiers/'.$donnees['titre_article'].$i.'m.jpg"/></a>';

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 15:17
par niuxe
Le point « . » veut dire dans le dossier courant alors que « .. » veut dire dans le dossier parent. Néanmoins, je peux me tromper et je désire que quelqu'un me le confirme.

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 15:43
par Ryle
Le "/" renvoi bien à la racine, mais selon le contexte, il ne s'agit pas de la même racine ;)

Pour le navigateur (donc dans tes balises img, script, ...), le "/" fait référence à la racine du domaine du site sur lequel il se trouve (en général cela correspond au niveau du nom de domaine).

Dans le système de fichier (lorsque tu accèdes aux dossiers/fichiers via php), le "/" fait référence cette fois à la racine du disque sur lequel le script se trouve (en gros, il va aller regarder dans "c:\" si ton fichier existe).

Le fait de ne pas commecer par "/" indique à php qu'il ne s'agit pas d'un chemin à partir de la racine, mais d'un chemin relatif par rapport au script exécuté. Le fait de spécifier "../" dans le chemin, indique à php qu'il doit remonter d'un dossier par rapport au dossier courrant :)

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 15:51
par Manuwaza
Oki merci pour ces précisions. Et dans le HTML, les .. sont aussi valables?

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 16:14
par Ryle
Vivi... y a que la notion de racine qui change en fonction du contexte :)

Pour le reste :
- "./" fait référence au dossier courrant et est implicite : "./mon_dossier/mon_fichier.ext" équivaut à "mon_dossier/mon_fichier.ext"
- "../" fait référence au dossier parent : "../../mon_fichier.ext" remonte de deux dossiers (le parent du parent) pour trouver le fichier
- "nom_dossier/" permet de descendre dans le dossier "nom_dossier" : "../nom_dossier/mon_fichier.ext" remonte dans le dossier parent puis descend dans le dossier "nom_dossier" pour trouver le fichier

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 16:17
par Manuwaza
Hé bien merci à vous deux, j'étais sacrément bloqué sur ce coup là :)
Désolé de mon ignorance, mais je ne suis qu'un pauvre autodidacte ;)

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 16:24
par Ryle
Bah y a pas de mal, c'est surtout pour apprendre que ces forums sont là :)

Ps : Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton Image en haut à droite de la réponse qui te semble la plus pertinente.

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 16:32
par Victor BRITO
Une solution pour régler les soucis de racines consiste à utiliser la constante magique __DIR__ (si tu es en PHP 5.3) ou __FILE__ combinée à dirname (). À partir de là, tu peux naviguer plus facilement dans l'arborescence.

Code : Tout sélectionner

if (!defined (__DIR__)) define ('__DIR__', dirname (__FILE__)); $chemin = __DIR__.'/../chemin-remontant-vers-le-dossier-images'; 

Re: Problème PHP fonction file_exists

Posté : 05 août 2009, 21:06
par Manuwaza
Ryle : c'est fait ;)
Victor BRITO : Merci à toi, mais je suis encore en php4 :oops:

Re: Problème PHP fonction file_exists

Posté : 06 août 2009, 02:07
par Victor BRITO
Victor BRITO : Merci à toi, mais je suis encore en php4 :oops:
Pour rappel, après-demain, ça fera un an, jour pour jour, que le support de PHP 4 a été arrêté. Il est vraiment grand temps que tu te mettes à jour. ;)

Cela dit, la constante magique __FILE__ et la fonction dirname () existent en PHP 4.

Re: Problème PHP fonction file_exists

Posté : 06 août 2009, 08:53
par Manuwaza
Quand tu dis que le support a été arrêté, ça veut dire quoi concrètement?