[PHP5] Bug avec include ?

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

Didier_S
WRInaute passionné
WRInaute passionné
 
Messages: 563
Inscription: Mar Aoû 24, 2004 22:25

[PHP5] Bug avec include ?

Message le Mar Oct 03, 2006 22:25

Je dois être fatigué... J'ai des soucis avec mes require_once() ;)

J'ai, à la racine de mon site, un dossier /class (contenant mes classes) et un dossier /data (qui renferme notamment des fichiers .txt contenant une partie de mon contenu).
A la racine de mon site, le fichier /index.php inclut le fichier /class/user.php, qui doit donc appeler /class/db.php. Pour cela, un simple
Code: Tout sélectionner
require_once 'db.php';

dans le fichier /class/user.php marche très bien. (Donc, le moteur php semple partir du répertoire courant pour faire l'inclusion, et pas du répertoire racine.)

MAIS !

Si dans mon répertoire /class, je veux inclure un fichier du répertoire /data, admettons, /data/config.txt (n'allez pas chercher, je ne stocke pas ma config en txt sur mon serveur ;)),
Code: Tout sélectionner
require_once '../data/config.txt';
me renvoie une belle erreur, fichier introuvable.

Petit soucis, si j'utilise /data/config.txt , tout marchera bien au niveau racine, mais pas dans le dossier /admin/, puisque les chemins ne seront pas les mêmes. Je ne peux donc pas utiliser simplement mes objets partout: ça casse un peu le délire !
Je ne souhaite pas utiliser de chemins absolus avec $_SERVER['DOCUMENT_ROOT'] (ou autre), je SAIS qu'on peut faire en sorte que le chemin 'de base' de l'include soit celui du script courant (et non de l'appelant), mais je trouve pas dans ma config ce qui peut causer ceci (config tout simplement récupérée sur un serveur du boulot, où tout se passe comme prévu...).

Une idée ?
Merci d'avance, je sèche, et comme d'habitude, ça fait plusieurs heures que je me ruine là-dessus ;)


rog
WRInaute accro
WRInaute accro
 
Messages: 1662
Inscription: Jeu Sep 21, 2006 2:32

Message le Mar Oct 03, 2006 22:29

c'est le script parent qui determine le chemin relatif

rog

Didier_S
WRInaute passionné
WRInaute passionné
 
Messages: 563
Inscription: Mar Aoû 24, 2004 22:25

Message le Mar Oct 03, 2006 22:33

Je te garantis que sur les serveurs que j'utilise au travail, pour les sites en php5, c'est bel et bien le script appelant qui détermine le chemin des include et require. C'est un vrai régal pour jongler d'un répertoire à l'autre selon les besoins. Les classes définies dans /class/ sont utilisables partout (racine, admin, sous-répertoires, etc) sans avoir besoin de rajouter de $path.

Actuellement, quand j'ai /class/1.php et /class/2.php, je peux faire
Code: Tout sélectionner
include '2.php';
dans le fichier 1.php, et l'appeler depuis le répertoire /class/ ou la racine, indépendamment, sans rien toucher.

Note bien que je parle de php5. J'ai remarqué pas mal de gens qui étaient "surpris" par ce nouveau comportement.


rog
WRInaute accro
WRInaute accro
 
Messages: 1662
Inscription: Jeu Sep 21, 2006 2:32

Message le Mar Oct 03, 2006 22:38

t'es bien sur d'avoir compris ?

/class/1
/class/2

dans ce cas le script parent est dans le même rep

donc c'est normal que ça marche

rog

Didier_S
WRInaute passionné
WRInaute passionné
 
Messages: 563
Inscription: Mar Aoû 24, 2004 22:25

Message le Mar Oct 03, 2006 22:42

ha oui ok, parent, pardon, je pensais au tout premier de la chaîne (grosse journée, je suis diminué ;))
donc en théorie, tu me confirmes que, à partir de /class/2.php, pour accéder à /data/config.txt, je devrais faire ../data/config.txt ?
Parce que là visiblement ça marche pas, je suis assez surpris, même eclipse me confirme ../data/config.txt, mais je me mange une grosse erreur ligne 1 (celle qui fait mal)
en tout cas merci de tes réponses !


rog
WRInaute accro
WRInaute accro
 
Messages: 1662
Inscription: Jeu Sep 21, 2006 2:32

Message le Mar Oct 03, 2006 22:49

ça depend du script parent

celui appelé par le navigateur

/index

/class/1
/class/2
/conf/conf


1er include /class/1 depuis l'index

include(./class/1)

inclusion de class/1 depuis /class/2

include(./class/1)

inclusion de /conf/conf depuis /class/2

include(./conf/conf)

pas mis d'apostrophes mais je pense que tu as compris maintenant

le script parent est /index

donc toutes les inclusions doivent etre renseignées par un chemin relatif à partir de celui-ci

rog

Didier_S
WRInaute passionné
WRInaute passionné
 
Messages: 563
Inscription: Mar Aoû 24, 2004 22:25

Message le Mar Oct 03, 2006 22:54

Bon bah je voudrais pas faire le casse-machins, mais justement.

Il existe une solution pour que ce soit le dernier fichier inclus qui serve de référence, et pas le premier de la chaine.

Parce que dans le cas contraire, dès que tu créées un sous-dossier, tous tes includes sont morts, et tu te retrouves à élaborer des systèmes souvent un peu bancals (bancaux ?) en concaténant des morceaux de path, ou en repartant à chaque fois de Document_Root (et mélanger config serveur et config appli, en général, mieux vaut éviter)

On utilise ça PARTOUT sur les serveurs de mon taff, j'ai la même config, ça devrait marcher pareil !
(je peux te fournir des morceaux de code pour te "prouver" que ça marche, si ça te tente)


rog
WRInaute accro
WRInaute accro
 
Messages: 1662
Inscription: Jeu Sep 21, 2006 2:32

Message le Mar Oct 03, 2006 23:06

en fait pour moi ça ne sert pas

je code en monofichier

tout est dans l'index

lol

rog

PinkEye
Nouveau WRInaute
 
Messages: 1
Inscription: Mar Oct 03, 2006 23:08

Message le Mar Oct 03, 2006 23:16

@ Didier_S : je te conseille de lire la doc PHP en ce qui concerne la directive de conf "include_path", tu trouveras l'explication à ton problème ;)

@ rog : je te conseille de lire la doc PHP ... au lieu de créer des expressions comme "monofichier" et de répondre avec un ton hautain !
Et franchement, quand tu as parlé d'index tu m'as fait sourire :) Potasse aussi la doc de ton httpd avec hein ;)

Didier_S
WRInaute passionné
WRInaute passionné
 
Messages: 563
Inscription: Mar Aoû 24, 2004 22:25

Message le Mar Oct 03, 2006 23:19

merci PinkEye, je suis dessus et effectivement, c'est bien de ça dont j'avais besoin.

et j'aurais du me douter que les vrais pros codaient en monofichier pour éviter les problèmes de config apache, et mélangeaient un peu les server-side includes et les appels client ;)


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités