[PHP] include dans une arborescence
Résolu/Fermé
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
-
2 déc. 2009 à 10:58
To1n00 Messages postés 137 Date d'inscription samedi 30 décembre 2006 Statut Membre Dernière intervention 12 octobre 2016 - 2 déc. 2009 à 15:14
To1n00 Messages postés 137 Date d'inscription samedi 30 décembre 2006 Statut Membre Dernière intervention 12 octobre 2016 - 2 déc. 2009 à 15:14
A voir également:
- [PHP] include dans une arborescence
- Easy php - Télécharger - Divers Web & Internet
- Comment faire une arborescence sur word - Guide
- Expert php pinterest - Télécharger - Langages
- Arborescence excel ✓ - Forum Excel
- Php alert ✓ - Forum PHP
12 réponses
Bonjour
Dans mon fichier 2, je fais un include ('../fichier1.php) => pas de problème
Ça m'étonnerait bien... Comment il devine qu'il faut passer au dossier1 ?
Le truc avec les include en relatif, c'est que le dossier de départ est celui du script qui a été appelé, et non pas celui du fichier où se trouve l'include.
Donc le même include relatif ne PEUT PAS convenir selon que tu appelles fichier2 en direct ou depuis fichier3 qui n'est pas au même niveau que fichier2
Dans mon fichier 2, je fais un include ('../fichier1.php) => pas de problème
Ça m'étonnerait bien... Comment il devine qu'il faut passer au dossier1 ?
Le truc avec les include en relatif, c'est que le dossier de départ est celui du script qui a été appelé, et non pas celui du fichier où se trouve l'include.
Donc le même include relatif ne PEUT PAS convenir selon que tu appelles fichier2 en direct ou depuis fichier3 qui n'est pas au même niveau que fichier2
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
2 déc. 2009 à 11:20
2 déc. 2009 à 11:20
Oui désolé j'ai voulu simplifier ma demande en créant une arborescence "fictif"
Je pensais plutot a une arborescence de type
http://100.100.100.1/dossier1/fichier1.php
http://100.100.100.1/dossier1/dossier2/fichier2.php
http://100.100.100.1/dossier1/dossier2/dossier3/fichier3.php
Mais l'arborescence derrière est bien plus complexe que ça en réalité.
"c'est que le dossier de départ est celui du script qui a été appelé, et non pas celui du fichier où se trouve l'include."
Oui c'est ce que j'ai donc constaté...
y a t'il une solution...? car c'est quand même très embêtant comme problème ...
J'ai fait des require_once avec des chemins absolus...
résultat : si je fais un require_once d'un fichier qui contient un echo et une définition de classe, l'echo fonctionne mais la définition de class non....
Je pensais plutot a une arborescence de type
http://100.100.100.1/dossier1/fichier1.php
http://100.100.100.1/dossier1/dossier2/fichier2.php
http://100.100.100.1/dossier1/dossier2/dossier3/fichier3.php
Mais l'arborescence derrière est bien plus complexe que ça en réalité.
"c'est que le dossier de départ est celui du script qui a été appelé, et non pas celui du fichier où se trouve l'include."
Oui c'est ce que j'ai donc constaté...
y a t'il une solution...? car c'est quand même très embêtant comme problème ...
J'ai fait des require_once avec des chemins absolus...
résultat : si je fais un require_once d'un fichier qui contient un echo et une définition de classe, l'echo fonctionne mais la définition de class non....
Avec des chemins absolus, ça marche forcément. Je ne vois pas où est le problème.
À condition d'avoir des chemins absolus partout, évidemment. Y compris dans les modules de définition des classes, s'ils comportent des include.
À condition d'avoir des chemins absolus partout, évidemment. Y compris dans les modules de définition des classes, s'ils comportent des include.
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
2 déc. 2009 à 12:00
2 déc. 2009 à 12:00
Les définitions de classes non comprennent pas d'include... seulement quelques header("location: ...") avec un chemin relatif.... mais penses tu que cela peut être la raison de l'echec de définition de la classe ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Certainement pas. Le chemin relatif dans un header('location.. concerne une URL, alors que les include et require naviguent dans le système de fichiers du serveur. Les deux notions sont distinctes et il ne faut pas les confondre.
Si le echo contenu dans un fichier s'exécute correctement, c'est que le fichier est bien inclus. Et s'il est inclus et que la définition de classe ne se fait pas, c'est que la classe est mal définie. Tu as un message d'erreur ?
Si le echo contenu dans un fichier s'exécute correctement, c'est que le fichier est bien inclus. Et s'il est inclus et que la définition de classe ne se fait pas, c'est que la classe est mal définie. Tu as un message d'erreur ?
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
2 déc. 2009 à 12:22
2 déc. 2009 à 12:22
Oui, c'est bien ce que je pensais.
La classe est correctement définie car elle est utilisé dans beaucoup d'autre fichier du programme sans aucun problème.
en fait :
detection.php = fichier2.php
r_machine_admin.php=fichier3.php
dans mon r_machine_admin.php, si je fais
require('http://192.12.1.252/sfao_disa/controleur/detection.php');
il affiche :
à la ligne 27, j'ai :
$MyDetection = new detection('0');
Par contre si je modifie le require('http://192.12.1.252/sfao_disa/controleur/detection.php'); en
require('../../controleur/detection.php');
il m'affiche l'erreur
Pour t'aider, voici un extrait du contenu de detection.php :
La classe est correctement définie car elle est utilisé dans beaucoup d'autre fichier du programme sans aucun problème.
en fait :
detection.php = fichier2.php
r_machine_admin.php=fichier3.php
dans mon r_machine_admin.php, si je fais
require('http://192.12.1.252/sfao_disa/controleur/detection.php');
il affiche :
Fatal error: Class 'detection' not found in e:\wamp\www\sfao_disa\administrateur\rapports\r_machine_admin.php on line 27
à la ligne 27, j'ai :
$MyDetection = new detection('0');
Par contre si je modifie le require('http://192.12.1.252/sfao_disa/controleur/detection.php'); en
require('../../controleur/detection.php');
il m'affiche l'erreur
Warning: main(../model/bdd/mysql.php) [function.main]: failed to open stream: No such file or directory in e:\wamp\www\sfao_disa\controleur\detection.php on line 13 Fatal error: main() [function.require]: Failed opening required '../model/bdd/mysql.php' (include_path='.;C:\php5\pear') in e:\wamp\www\sfao_disa\controleur\detection.php on line 13
Pour t'aider, voici un extrait du contenu de detection.php :
require_once("../model/bdd/mysql.php"); require_once("machine.php"); require_once("personne.php"); require_once("operation.php"); require_once("taches.php"); require_once("relation.php"); /* Classe detection : instancier à chaque badge */ class detection { var $codebarre; var $myPersonne; var $myMachine; var $myOperation; var $arrayInfo; /* Constructeur */ function detection($var){ ......
Tu fais tes require avec des URL ??? C'est une horreur ! tu passes par internet pour inclure des fichiers qui sont sur ta propre machine ? C'est un gaspillage de ressources phénoménal !
Et surtout, ça montre que tu ne comprends pas ce qui se passe.
Quand tu mets http://... comme nom de fichier, ça veut dire que tu t'adresses à un serveur web et non pas au système de fichiers de ta machine (le nom serait "c:/dossier par exemple sur un serveur windows)
Le serveur web qui reçoit cette demande de fichier y répond (il est sympa) mais comme c'est un fichier php, il l'exécute. Il n'envoie pas le source du php (c'est un peu le but en général). Donc ce que tu inclus, ce n'est pas le fichier sfao_disa/controleur/detection.php, mais le résultat de l'exécution du script http://192.12.1.252/sfao_disa/controleur/detection.php.
J'avais tout à fait raison de dire dans mon message 5 que les notions d'adresse de fichier et d'URL étaient distinctes et qu'il ne fallait pas les confondre. Visiblement, tu ne fais pas la distinction
Et surtout, ça montre que tu ne comprends pas ce qui se passe.
Quand tu mets http://... comme nom de fichier, ça veut dire que tu t'adresses à un serveur web et non pas au système de fichiers de ta machine (le nom serait "c:/dossier par exemple sur un serveur windows)
Le serveur web qui reçoit cette demande de fichier y répond (il est sympa) mais comme c'est un fichier php, il l'exécute. Il n'envoie pas le source du php (c'est un peu le but en général). Donc ce que tu inclus, ce n'est pas le fichier sfao_disa/controleur/detection.php, mais le résultat de l'exécution du script http://192.12.1.252/sfao_disa/controleur/detection.php.
J'avais tout à fait raison de dire dans mon message 5 que les notions d'adresse de fichier et d'URL étaient distinctes et qu'il ne fallait pas les confondre. Visiblement, tu ne fais pas la distinction
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
2 déc. 2009 à 13:56
2 déc. 2009 à 13:56
Tu pourrai tout de même être une peu plus délicat, car là j'ai l'impression de me faire disputer par ma maman. Enfin bref, passons...
Je vais te préciser le contexte : je développe une application pour mon entreprise, rien a voir avec une petite appli local qui tourne sur ma machine, 192.12.1.252 est l'adresse du serveur Web de ma boite (serveur apache comme je le disais sur mon premier poste).
Jusque là, tous mes require et include étaient en chemin relatif mais puisque je viens d'avoir ce problème (du a l'arborescence), j'ai testé des chemins en absolu avec
require('http://192.12.1.252/sfao_disa/controleur/detection.php');
J'ai bien conscience que ceci ne va pas inclure le code php mais le code interprété par le serveur Web, je n'ai tout simplement pas fait attention en testant ceci.
Mais alors comment faire pour accéder au fichier detection.php sur le serveur..?
cela ne marche pas je suppose .. : require('192.12.1.252/sfao_disa/controleur/detection.php'); ?
Merci
Je vais te préciser le contexte : je développe une application pour mon entreprise, rien a voir avec une petite appli local qui tourne sur ma machine, 192.12.1.252 est l'adresse du serveur Web de ma boite (serveur apache comme je le disais sur mon premier poste).
Jusque là, tous mes require et include étaient en chemin relatif mais puisque je viens d'avoir ce problème (du a l'arborescence), j'ai testé des chemins en absolu avec
require('http://192.12.1.252/sfao_disa/controleur/detection.php');
J'ai bien conscience que ceci ne va pas inclure le code php mais le code interprété par le serveur Web, je n'ai tout simplement pas fait attention en testant ceci.
Mais alors comment faire pour accéder au fichier detection.php sur le serveur..?
cela ne marche pas je suppose .. : require('192.12.1.252/sfao_disa/controleur/detection.php'); ?
Merci
Je suis vraiment désolé de t'avoir froissé, ça n'était vraiment pas le but. L'idée était seulement de te faire réagir, pas de te blesser.
Enfin, maintenant les choses sont claires.
Quand tu as un adressage relatif :
require('../detection.php');
et que tu crois le remplacer par un adressage absolu en écrivant :
require('http://192.12.1.252/sfao_disa/controleur/detection.php');
tu te trompes.
Tu as AUSSI changé la nature de ce qui est inclus. Dans un premier cas, c'est un fichier. dans le second, c'est une URL.
le véritable adressage absolu, avec lequel tu insères toujours un fichier, serait :
require($_SERVER['DOCUMENT_ROOT'].'/sfao_disa/controleur/detection.php');
la variable $_SERVER['DOCUMENT_ROOT'] est pédéfinie en PHP et contient le chemin de la racine de on site dans le système de fichiers. tu peux faire echo $_SERVER['DOCUMENT_ROOT'] pour voir
Enfin, maintenant les choses sont claires.
Quand tu as un adressage relatif :
require('../detection.php');
et que tu crois le remplacer par un adressage absolu en écrivant :
require('http://192.12.1.252/sfao_disa/controleur/detection.php');
tu te trompes.
Tu as AUSSI changé la nature de ce qui est inclus. Dans un premier cas, c'est un fichier. dans le second, c'est une URL.
le véritable adressage absolu, avec lequel tu insères toujours un fichier, serait :
require($_SERVER['DOCUMENT_ROOT'].'/sfao_disa/controleur/detection.php');
la variable $_SERVER['DOCUMENT_ROOT'] est pédéfinie en PHP et contient le chemin de la racine de on site dans le système de fichiers. tu peux faire echo $_SERVER['DOCUMENT_ROOT'] pour voir
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
2 déc. 2009 à 14:41
2 déc. 2009 à 14:41
Entendu, tu sais ce que c'est internet, on peut rapidement mal interprété les choses écrites.
Pour la nature des fichiers, c'est pourtant une notion que je connais mais là le problème de "dossier de départ" pour interpréter les "../" dans des include, ça m'a vraiment perturbé et j'étais un peu perdu...
Je ne connaissais pas cette variable $_SERVER['DOCUMENT_ROOT'] mais effectivement je viens de tester et ça semble répondre tout a fait à mon problème.
J'ai repris le travail de quelqu'un d'autre et absolument tous les chemins sont en relatif... Il ne me reste plus qu'à modifier ça.... (un boulot monstre)
Mais au moins ça marchera !
Et de cette manière, normalement j'aurai un appli exportable sur un autre serveur sans rien avoir à modifier...
Merci sincèrement pour le temps passé à m'aider.
To1n00
Pour la nature des fichiers, c'est pourtant une notion que je connais mais là le problème de "dossier de départ" pour interpréter les "../" dans des include, ça m'a vraiment perturbé et j'étais un peu perdu...
Je ne connaissais pas cette variable $_SERVER['DOCUMENT_ROOT'] mais effectivement je viens de tester et ça semble répondre tout a fait à mon problème.
J'ai repris le travail de quelqu'un d'autre et absolument tous les chemins sont en relatif... Il ne me reste plus qu'à modifier ça.... (un boulot monstre)
Mais au moins ça marchera !
Et de cette manière, normalement j'aurai un appli exportable sur un autre serveur sans rien avoir à modifier...
Merci sincèrement pour le temps passé à m'aider.
To1n00
Je ne connaissais pas cette variable $_SERVER['DOCUMENT_ROOT']
Je t'invite à regarder dans la doc PHP un truc qui s'appelle les tableaux superglobaux ($_SERVER en fait partie) tu y trouveras un tas d'autres variables très utiles. Pas la peine de tout apprendre par coeur(!), juste pour avoir une idée de ce qui existe.
https://www.php.net/manual/fr/language.variables.superglobals.php
Au plaisir :)
Je t'invite à regarder dans la doc PHP un truc qui s'appelle les tableaux superglobaux ($_SERVER en fait partie) tu y trouveras un tas d'autres variables très utiles. Pas la peine de tout apprendre par coeur(!), juste pour avoir une idée de ce qui existe.
https://www.php.net/manual/fr/language.variables.superglobals.php
Au plaisir :)
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
2 déc. 2009 à 15:14
2 déc. 2009 à 15:14
Merci :d