Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 01/09/2011, 12h57   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 53
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 53
Points : 11
Points : 11
Par défaut Inclusions labyrinthiques (galère avec include)

Bonjour à tous et à toutes.
Je me heurte depuis pas mal de temps à un pitit problème.
J'ai dans un dossier qui peut-être situé n'importe où par rapport au dossier racine deux sous-dossiers, dans lesquels j'ai plusieurs fichiers comme cela :

Dossier programme
|
|__________ Dossier A
| |
| |______autre.php
| |
| |______Sous-dossier B
| * |
| * |
| * |______fichier.txt
|
|
|__________Dossier B
| |
| |
| |________sous-programme.php
|
|
|__________programme.php


Cela devrait fonctionner comme ça : programme.php inclut sous-programme.php, sous-programme.php inclut autre.php et lit fichier.txt.
Malheureusement je ne suis pas parvenu à un moyen pour inclure les fichiers.
J'ai ça pour l'instant :
sous-programme.php :
Code php :
1
2
include '../Dossier A/autre.php';
fopen ('../Dossier A/Sous-Dossier B/fichier.txt', 'r');

programme.php :
Code php :
include 'Dossier B/sous-programme.php';

Mais cela me renvoie une erreur dans le sous-programme (comme quoi les fichiers autre.php et fichier.txt n'ont pas été trouvés et la réaction en chaîne avec le reste du programme).

Un moyen sans passer par les URLs d'inclusion (ce qui n'est vraiment pas optimal).
Merci d'avance de votre aide.
DarkVadorette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 13h32   #2
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
Tu devrais utiliser __DIR__
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 18h07   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 53
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 53
Points : 11
Points : 11
Non non, je suis sûr et certain du nom du répertoire parent de sous-programme.php (c'est pour l'exemple), mais je n'arrive pas à remonter à la racine...
DarkVadorette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 18h29   #4
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
Ha ok.

À ta place, je commencerais par me débarrasser des espaces dans les noms de dossier.
Ça pourrait très bien être une cause d'erreurs.

Ensuite, c'est la constante $_SERVER qui devrait te permettre de retrouver le dossier principale.
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 01/09/2011, 18h49   #5
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 53
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 53
Points : 11
Points : 11
$_SERVER['SCRIPT_FILENAME'] ?
Déjà tenté, inutile apparemment...
Le truc c'est qu'avec include PHP lit systématiquement les fichiers à partir du dossier actif...
DarkVadorette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 20h12   #6
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
Il y a d'autres clés utiles à $_SERVER.

Mais le plus simple c'est d'avoir un premier script à la racine qui définisse une constante "ROOT" ensuite à partir de ce script tu fais ton premier include qui lui fera le second etc. toujours en utilisant la constante "ROOT" définie au début.

À part ça, à ma connaissance y a pas de moyens très pertinents de recomposer le chemin absolu (définir proprement un php.ini et son document_root pour chaque site php sur un même serveur me parait rébarbatif).

Sinon, plutôt que de penser fichier, tu pourrais penser classe : chaque fichier est une classe et tu surcharges __autoload dans ton fichier "maitre" pour ouvrir le bon fichier en fonction de la classe.
Je ne pense pas que tu choisiras cette alternative mais il est utile de la connaître.
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 12h19   #7
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 771
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 771
Points : 790
Points : 790
Citation:
Envoyé par DarkVadorette Voir le message
Le truc c'est qu'avec include PHP lit systématiquement les fichiers à partir du dossier actif...
Exact, raison pour laquelle je n'utilise jamais de chemins relatifs dans les chemins d'accès.

Par contre, ce qui en principe change très peu (et jamais en te prenant par surprise), c'est la structure générale de l'arborescence. Un chemin absolu à partir du fichier qui fait l'include est donc la solution classique.


Code :
1
2
3
// dans sous-programme.php ->
include dirname(__FILE__).'/../autre.php';
fopen(dirname(__FILE__).'/../Sous_dossierB/fichier.txt', 'r');
avec éventuellement un appel à realpath() quand tu veux nettoyer tes chemins (mais ça prend des ressources...)
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 17h03   #8
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 53
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 53
Points : 11
Points : 11
Merci beaucoup à vous deux, la solution d'Herode me convient parfaitement.
Je passe en résolu.
DarkVadorette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 13h55   #9
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
Citation:
Envoyé par DarkVadorette Voir le message
Merci beaucoup à vous deux, la solution d'Herode me convient parfaitement.
lol

__DIR__ non mais dirname(__FILE__) oui ?

Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2011, 09h51   #10
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 53
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 53
Points : 11
Points : 11
En fait __DIR__ me pose un problème car les serveurs sur lesquels je vais installer mon application ne tournent pas tous sur une version récente de PHP (là il faut au moins la 5.3 pour que ça marche).
Voilà-voilà, encore merci.
DarkVadorette 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 18h25.


 
 
 
 
Partenaires

Hébergement Web