Des include dans un fichier qui est lui même inclu ensuite

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Des include dans un fichier qui est lui même inclu ensuite

par dimalta5 » 06 févr. 2008, 18:04

Salut Zeus,

dirname(__FILE__) ne m'effraie pas je l'utilise tout le temps depuis que j'ai découvert qu'avec on pouvait faire de include traité au niveau du fichier et nom au niveau de script appelé. Mais vu que je l'utilise tout le temps, hier je me suis demandé si j'étais pas entrain d'écrire partout dans mon code un truc pas trop correct.

Je trouve ça déjà très bien include dirname(__FILE__) mais dans un souci de perfectionnisme je vous consulte pour savoir si il n'y a pas quelques chose de mieux, je sais pas moi, __DIR__ par exemple.

Et enfait je suis un peu dégouté de ne pas avoir découvert include dirname(__FILE__) plutôt. J'ai l'impression d'avoir perdu beaucoup de temps pour rien à écrire du code inutilement compliqué.

par titerm » 06 févr. 2008, 11:42

une autre approche possible est d'utiliser spl_autoload()

par Sékiltoyai » 06 févr. 2008, 10:49

Vu sous cet angle, ouais, ca devient utile de faire comme ca…

par zeus » 06 févr. 2008, 09:05

Je ne comprend pas pourquoi dirname(__FILE__) vous effraie puisqu'il est couramment utilisé.

Sinon, pour ma part, j'utilise un système de fichiers de configuration à chaque niveau de mon application. Chaque fichier de config est chargé d'inclure le fichier de config du niveau supérieur (avec dirname(__FILE__)) et de définir ses propres variables de configuration
Dans chaque script, j'inclus en dynamique (../libs/config.php) le fichier de config le plus proche.

L'avantage de cette méthode, outre partager les configurations par niveau, c'est que les inclusions de mes fichiers, outre celles de mes fichiers de config, est toujours grâce à un chemin complet.

par dimalta5 » 06 févr. 2008, 06:19

c'est ce que je veux, des include traités au niveau du fichier et non du script appelé parce que ça me permet d'écrire des librairies sans avoir à faire comme dans pear où il faut définir le include_path.

je crois que certains hébergeurs ne permettent même pas de le définir le include_path comme on veut et se contentent de fournir un seul dossiers pour y mettre toutes les librairies.

en plus si je veux distribuer ma librairie c'est beaucoup plus sympa pour les gens qui vont l'utiliser de ne pas avoir ça à faire et pouvoir la placer où ils veulent.

maintenant ce qui me fait douter de ma façon de faire c'est justement que par exemple dans pear c'est fait autrement, j'ai tendance à me dire qu'ils doivent avoir raison mais je comprends pas en quoi...?

(merci pour "include traités au niveau du fichier et non du script appelé" c'est exactement la phrase que je cherchais et que j'arrivais pas à trouver, ça aurait du être ça le titre de la discussion)

par Sékiltoyai » 06 févr. 2008, 02:53

Déjà, le truc du chemin absolu, je ne suis pas trop convaincu…
Ensuite, le problème est que si tu fais dirname(__FILE__), le résultat dépendra de là où tu te situeras, c'est à dire que si tu fais :
index.php :
include dirname(__FILE__) . 'test/inc1.php';
include dirname(__FILE__) . 'test/inc2.php';

Tu peux être tenté par :
test/inc1.php :
include dirname(__FILE__) . 'test/inc2.php';

Mais ca te renverrait en réalité vers test/test/inc2.php puisque __FILE__ est traité au niveau du fichier et non tu script appelé.

Je pense qu'il faut donc imaginer autre chose, cette autre chose dépendant en partie de comment sont organisés tes fichiers incluants et inclus. Parce qu'il y a des solutions couramment utilisées pour régler ce genre de problème, mais pas forcément terribles, tu n'as peut être pas envie d'utiliser un char pour tuer une mouche…

par dimalta5 » 06 févr. 2008, 01:46

Salut Sékiltoyai,

La structure dont tu parles est très bien mais parfois tu dois travailler aussi sur des applications dont tu n'as pas choisi la structure toi même.

Sinon dans le deuxième exemple que je donne avec les fichiers langue tu peux même avec ta structure de site avoir besoin de ce dont je suis en train de parler.

Tout ce que je cherche à savoir c'est si c'est bien comme ça que ça s'écrit "include dirname(__FILE__)"
il y aurait pas quelque chose de plus simple, une syntaxe spécialement prévue pour ça par exemple.
Parce que la ça ressemble plus à une astuce qu'autre chose en passant par dirname, non?

par Sékiltoyai » 06 févr. 2008, 01:27

Si t'as 5 fichiers à inclure sur toutes les pages de ton site, tu vas pas faire 5 include() à la suite sur toutes tes pages, mais tout mettre dans une page que tu inclueras elle partout. Enfin c'est ce qu'il y a de plus logique ;)
Je règle le problème simplement : Chez moi ce sont les pages du site qui sont inclues, et non le contraire. J'ai assez pesté contre l'architecture trop répandue de la page qui inclue les fichiers qu'elle utilise, plutôt qu'une organisation plus structurée d'un seul script qui initialise tous les composants nécessaires et inclue la page en fonction des arguments du script…

par dimalta5 » 06 févr. 2008, 01:15

Je suis pas d'accord

connexion.php contient la connexion à la base de données

j'ai pas envie de mettre ça avec les fonctions du fichier fonction.php.

D'autre part il y a un autre cas d'application de cette technique, si par exemple j'ai une classe Login générique qui gère la connexion de utilisateurs à un site et qui affiche le formulaire Login et mot de passe.

Si cette classe est traduite j'inclus le fichier langue choisi de cette façon la

include dirname(__FILE__).'/Lang/'.$Lang.'.php';

Les fichiers étant organisés de la façon suivante:

lib/Login/Login.php (contient la classe Login)

lib/Login/Lang/fr.php (fichier langue: français)
lib/Login/Lang/en.php (fichier langue: anglais)
lib/Login/Lang/it.php (fichier langue: italien)
...

Et lorsque j'ai à utiliser cette classe j'ai pas besoin d'inclure autre chose que Login.php

Mais je vais pas mettre toutes les traductions dans le même fichier ce serait bête pour les prefs
alors que je n'en ai besoin que d'un seul à la fois

Ce que j'aurais vraiment voulu savoir c'est si ça "include dirname(__FILE__)" c'est la bonne syntaxe pour le faire?

par Genova » 06 févr. 2008, 00:44

Si t'as 5 fichiers à inclure sur toutes les pages de ton site, tu vas pas faire 5 include() à la suite sur toutes tes pages, mais tout mettre dans une page que tu inclueras elle partout. Enfin c'est ce qu'il y a de plus logique ;)

par Sékiltoyai » 06 févr. 2008, 00:27

Salut,
tout le monde fait ça :D
Euh, non…

par Genova » 05 févr. 2008, 22:21

Salut,
tout le monde fait ça :D

Des include dans un fichier qui est lui même inclu ensuite

par dimalta5 » 05 févr. 2008, 21:51

Bonjour,

J'aimerai avoir votre avis sur une solution que j'utilise régulièrement.

J'ai un certain nombres de fichiers qui sont tout le temps utilisés sur mon site:

lib/config.php
lib/connexion.php
lib/fonctions.php
...

Pour ne pas devoir réécrire toute cette quantité de include sur chaque page du site j'ai ajouté
ça à la fin de config.php:

include dirname(__FILE__).'/connexion.php';
include dirname(__FILE__).'/fonctions.php';
...

De cette façon dans mes pages je n'ai plus qu'à inclure un seul fichier (lib/config.php) et les autres
viennent avec.

Je trouve ça très pratique mais vu que j'ai jamais vu personne d'autre le faire j'ai un ptit doute
sur ma solution.

Merci d'avance pour vos avis

John D