Poblème execution include()

Petit nouveau ! | 4 Messages

06 mai 2009, 17:20

Bonsoir je débute en php et j'ai mis en place certaine pages shématisée ci_dessous :
Image

Donc comme le shéma le montre mon 'site' se compose de :

une page config.php qui comporte certaines informationq telles les infos de la base de données
un dossier classes qui comportes des classe php qui executent des requêtes vers la base de donnée
une page index qui appele une classe classe1.php à partir de dossier classes

Dans le dossier classes :
cls_mere.php classe qui fait quelque chose.
classe1.php classe qui effectue autre chose mais qui appelle la classe cls_mere car elle herite d'elle.

Bref les fonctions qui figurent dans chaque classe ou le contenu de chaque fichiers n'est pas important
ce qui importe le plus c'est les includes.


Bon quand j'execute, j'ai un maudit message d'erreur qui apparait:

Warning: include(../config.php) [function.include]: failed to open stream: No such file or directory in D:\wamp\www\classes\cls_mere.php on line 3
Warning: include() [function.include]: Failed opening '../config.php' for inclusion (include_path='.;C:\php5\pear') in D:\wamp\www\sfe\classes\cls_mere.php on line 3


Donc grossomodo ça ne marche pas .

Mais quand je met le fichier index.php dans un dossier que je nmme par exemple ' essai ' et que je change l'include du index.php en code]include "../classes/classe1.php";[[/code]
ça marche


Donc pourquoi s'il vous plait la première architecture ne marche pas ?
Merci d'avance de votre aide et bonne journée.

ViPHP
ViPHP | 2291 Messages

06 mai 2009, 18:24

Salut,

Si tu respect le schema que tu a donner :?:
Ceci est incorrect
(../config.php)
tu remonte d'un niveau
Dans le schema donner, il faut mettre par exemple, ceci
(config.php)
Tu reste au même niveau que ta page index
Mais quand je met le fichier index.php dans un dossier que je nmme par exemple ' essai ' et que je change l'include du index.php en code]include "../classes/classe1.php";[[/code]
Normal puisque du dossier essai tu remonte d'un niveau puis tu va dans le dossier classe.

Petit nouveau ! | 4 Messages

06 mai 2009, 19:05

Si tu respect le schema que tu a donner Question
Ceci est incorrect

(../config.php)
Pourquoi celà est incorrect?
cls_mere qui est dans le dossier classes appelle config.php qui est dans un dossier parent nomé racine
donc on aura include "../config.php"
le ../ c'est pour remonter d'un dossier et donc se situer dans le dossier racine ensuite on appelle le fichier config.php
donc du coup je crois qu'on auras ../config.php comme ligne de code dans le fichier cls_mere.php

ViPHP
ViPHP | 2291 Messages

06 mai 2009, 22:21

Si je me refere au schema que tu montrais tu include classe dans index donc tu remonte d'un niveau, et tu include config dans classe mais comme classe est déjà monter il va chercher config qui lui est au même niveau.
De toue façon essaye et tu verra bien :wink:

ViPHP
ViPHP | 3300 Messages

06 mai 2009, 23:56

je t'ai répondu sur ton autre thread concernant ce problème, pense à ne pas faire du multipost, c'est dommage de scinder les réponses et aides.
Fait du php depuis que ca existe ou presque :)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

07 mai 2009, 00:20

Il faut savoir que le fait d'inclure un fichier par l'instruction include, ce dernier est intégré dans le fichier qui l'inclue et donc tous les chemins relatifs aux quels se réfère le code du fichier inclus pointent systématiquement vers la racine du fichier qui inclut.

Par exemple, dans ton cas, quand le fichier index.php inclut le fichier "classes/classe1.php" il l'intègre dans son contexte d'exécution et donc tous les include ayant des chemins relatifs du fichier inclue pointeront vers la racine du fichier index.php. Donc, comme le fichier "classes/classe1.php" contient le code :
include("cls_mere.php");
le fichier "cls_mere.php" sera recherché dans la racine du fichier "index.php" qui inclut le fichier "classes/classe1.php".

L'inclusion locale est comme un système de copie/coller ou édition lien, où le code du fichier inclue vient s'ajouter dans le contexte d'exécution du fichier qui inclut comme si ce code a été écrit dedans.

Pour palier au problème de perte de chemin du à l'inclusion, il faut utiliser des chemins absolus (fixes) comme : racine du site/dossier/dossier/... ou c:/dossier/... ou bien utiliser des fonctions PHP qui permettent de déduire les chemins automatiquement par rapport à la racine du site et ou des variables d'environnement et éventuellement les compléter comme $_SERVER["REQUEST_URI"], __FILE__, dirname(), basename(), ....
Pour plus d'infos, voir, les variables d'environnement: http://perso.univ-rennes1.fr/pascal.aub ... server.php
et http://fr.php.net/manual/fr/book.filesystem.php
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 4 Messages

07 mai 2009, 04:30

Merci beaucoup sadeq grâce à toi je viens de comprendre le principe de fonctionnement de la fonction include.
Choukran bzzaf ou salamou 3Laykoum a khouya