Include ou filegetcontent ?

WRInaute occasionnel
Bonjour

Pour l'architecture de mon site, j'essaie de regrouper au maximum tous les morceaux de code commun dans des fichiers, que j'appelle ensuite sur les pages du site, via la fonction php INCLUDE.

Sachant que dans mon site il y a de nombreux répertoires et sous répertoires de créés, ... naturellement j'ai eu envie de faire un appel du type :
Include "http://www.monsite.com/file.php", afin de pouvoir appeler les fichiers depuis les répertoires.

Sauf que je viens de découvrir que la fonction include ne marche pas avec un appel à une url complète.

Une solution pourrait être d'utiliser la fonction php FILEGETCONTENT, qui elle fonctionne avec une url et repond à mon attente.

Par contre, voyez vous un inconvénient, ou un risque à utiliser cette fonction ?


Merci par avance pour votre retour.

Jérémie
 
WRInaute occasionnel
Merci pour la reponse.
Je fais cela pour appeler en effet le fichier de 1er niveau.
Par contre, mon problème se pose en fait surtout pour appeler des fichiers depuis un fichier déjà appelé par la fonction INCLUDE ! C'est là que mon problème se pose.... j'aurais dû le preciser.
 
WRInaute occasionnel
En fait toutes les pages du site vont appeler un fichier file_head.php.
Et dans le fichier file_head.php, je fais appel à d'autres fichiers.

Pour appeler le fichier file_head.php, je peux à chaque appel préciser sa position. Par contre, concernant son contenu, je ne peux pas le modifier à chaque appel. C'est pour ça que je voudrais donner l'adresse complète des fichiers appelés dans le file_head.
 
WRInaute occasionnel
Merci pour ce lient fort interessant.
Je n avais encore jamais utilise cette constante.
J essaie des demain et vous tiens au courant.
 
WRInaute accro
Include ou filegetcontent
Il n'y a, à la base, aucune question a se poser c'est une histoire de technologie.

Include (bien qu'il puisse travailler sur http cf faille include bien connue) travail a priori sur un système de fichier on inclus donc un code local.

filegetcontent est plus adapté a un travail sur http donc sur une couche réseau.

Bref un script actif ne dois pas si il peut s'en passer passer a travers le réseau pour fonctionner dans la mesure ou c'est 1000 fois plus lent et gourmand qu'un accès direct au système de fichier.

Après comme cela semble souligné (j'ai pas suivi les liens), les souci de multiples présences d'un script avec include se compensent avec require voir les déclinaisons _once, mais sont surtout le reflet d'une architecture mal pensée.
 
WRInaute occasionnel
Bonjour,

J'ai donc essayé ... ça marche ... mais je dois avouer ne pas tout bien comprendre.
Peut-être pourrez vous m'expliquer certaines choses.

Je vous explique mon architecture.
Je vais essayer d'être clair.


==> A la racine de mon site, j'ai un ficher qui s'appelle "global.php" et qui contient : define( 'ROOT_DIR', dirname(__FILE__) );
J'appelle ce fichier dans toutes les pages de mon site, avec un : <? include 'global.php' ; ?>

==> J'ai un autre fichier à la racine de mon site, "global2.php", également appelé dans toutes les pages de mon site (avec un <? include 'global2.php' ; ?>) et dans lequel je fais (entre autre) un appel à un autre fichier situé dans le sous répertoire "rep1", où je vais chercher la connection à la BD.
Pour appeler ce fichier (donc dans le "global2.php"), je fais : "require_once( ROOT_DIR.'rep1/bd.php' );"

(vous suivez toujours ??!!)

==> Ensuite, dans le répertoire "rep2", j'ai un fichier qui s'appelle "calcul.php"
Dans le fichier "calcul.php", je fais donc normalement ces 2 appels :
------->> <? include '../global.php' ; ?>
------->> <? include '../global2.php' ; ?>

Tout fonctionne correctement.

Par contre, étrangement, la page "calcul.php" fonctionne même si je modifie le contenu de la page "global2.php", en retirant le ROOT_DIR :
----->> "require_once( ROOT_DIR.'rep1/bd.php' );"
----->> "require_once( 'rep1/bd.php' );"


Finalement, je ne comprends pas trop comment fonctionne le "require_once" et le "ROOD_DIR".


Jérémie
 
WRInaute accro
"require_once", "inclus" un fichier si il n'est pas déjà "inclus", pour la constante que tu as défini, ROOT_DIR, fait un echo pour comprendre. Ce n'est pas car tu ne l'a pas définie que ton chemin est forcement mauvais en relatif.
 
WRInaute occasionnel
Merci pour ton retour.
En fait je n'ai pas réussi à afficher la valeur de la constante en faisant <? Echo ROOT_DIR ; ?>
Comment peut il reconnaître une constante sans le $ ?
 
Discussions similaires
Haut