Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/03/2007, 14h34   #1
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
Par défaut Chemin du fichier à lire

Bonjour,

je me retrouve devant un casse-tête et j'espère qu'il y a une méthode/solution !
Disons que j'ai 2 pages (a 2 emplacements différents) qui chargent un même script php.

¤ index.php à la racine du site qui inclus pageX.php se trouvant dans un dossier "php" de cette manière :
index.php :
Code :
1
2
3
4
5
<?php
if (file_exists("php/pageX.php")) {
    include("php/pageX.php");
}
?>
¤ pageA.php dans un dossier "dossier" qui inclus pageX.php de cette manière :
dossier/pageA.php :
Code :
1
2
3
4
5
<?php
if (file_exists("../php/pageX.php")) {
    include("../php/pageX.php");
}
?>
Jusqu'ici pas de problème... le souci vient du fait que pageX.php doit charger le contenu d'un *.txt de cette manière :
Code :
$texte = file_get_contents("php/fichier.txt");
Du coup, le ciblage est forcément faux pour l'un des 2 appels.
Dans le cas présent, c'est l'appel de pageA.php qui ne peut pas fonctionner car il ne se trouve pas au même endroit que le dossier php.

Y a-t-il une astuce, une méthode pour pallier à ces désagréments ?


Merci d'avance.
Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2007, 14h43   #2
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
J'ai déjà eu le même genre de désagrément.
Je me souviens plus du détail, mais j'avais mis le traitement "sensible" dans une fonction, qui prenait en paramètre le répertoire de travail du script courant, à partir duquel travailler.
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2007, 14h58   #3
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
merci Eusebius pour ta participation

y aurait pas une méthode pour cibler toujours à partir de la racine du site ?
moi, je pensais que :
../ : remonté d'un niveau
./ : dossier actuel
/ : racine du site (ce qui d'après mes tests est inexact... )
Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2007, 15h16   #4
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
ah si, normalement en commençant par un slash c'est un chemin absolu... [edit : uniquement sous UNIX, merci Taum] Moi je ne l'avais pas utilisé parce que j'avais besoin que ça reste portable lors d'une migration.
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2007, 15h19   #5
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Salut,

Tu peux utiliser la constante __FILE__ qui contient toujours le nom (chemin complet) du fichier courant. De plus on peut extraire le dossier avec dirname().
Par exemple :

Code :
1
2
3
4
php/pageX.php:
-------------
// Appellera toujours php/fichier.txt, quelque soit le fichier qui inclus
$texte = file_get_contents(dirname(__FILE__).'/fichier.txt');
Une autre solution est de définir une constante dans tes pages (ou dans un fichier de config) que tu utiliseras partout.
Par exemple :
Code :
1
2
3
4
5
6
7
config.php:
----------
define('APP_ROOT', dirname(__FILE__)); // Vaudra toujours le dossier racine de l'application
 
php/pageX.php:
-------------
$texte = file_get_contents(APP_ROOT.'/fichier.txt'); // Pas d'ambiguité puisqu'on utilise la constante prédéfinie

Quand au "/" simple, il designe la racine du site en HTML seulement. Pour le système de fichier local, c'est la racine du système de fichier sur unix mais pas pour windows (qui utilise C:\, D:\ etc..).
En d'autres termes, tu peux utiliser en HTML (<a href="/page.html">) mais pas en PHP (fopen("/page.html")).


cf. aussi http://php.developpez.com/faq/index....riptdansscript qui propose d'utiliser $_SERVER['DOCUMENT_ROOT'], et oui en PHP aussi there's more than one way to do it
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2007, 15h57   #6
Membre habitué
 
Inscription : octobre 2005
Messages : 641
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 641
Points : 143
Points : 143
Merci Taum
avec toutes ces précisions, je devrais arranger la chose...

Encore merci à vous deux !
Tchupacabra est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h35.


 
 
 
 
Partenaires

Hébergement Web