IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Question sur PHP - Gestion des Includes


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 43
    Points : 29
    Points
    29
    Par défaut Question sur PHP - Gestion des Includes
    Bonjour,

    J'ai un petite question très certainement stupide mais je ne trouve null part ailleurs une expliquation.

    J'ai l'habitude de faire des applications J2EE ou dot.net et donc du coup quand il faut repasser à un langage plus simple comme php on a pas particulièrement envie de perdre certaine de ces habitudes...

    c'est pour cette raison que j'aime bien organiser mon travail en package/class avec une conception orientée mvc.

    J'ai organisé mes pages web comme ceci (c'est un exemple)

    /index.php (le frontcontroller)
    /web/accueil/index.php (la page d'accueil)
    /web/fr/page1/index.php (la page 1 en francais)
    /web/admin/index.php(la page d'admin)
    etc...

    car je ne veux pas que toutes mes pages soient au meme niveau....tel que

    /index.php
    /accueil.php
    /admin.php
    /fr_page1.php
    etc...

    Voila ma question (désolé pour l'introduction de 4 km), comment faire pour gérer mes includes, car quand j'appelle une classe depuis index.php, le chemin de cet include sera comme ca : 'php/database/DbFactory.php' par exemple mais quand je l'appelerai depuis /web/admin/index.php, il devra etre '../../php/database/DbFactory.php'... ce qui ne va pas du tout car si DbFactory a d'autres includes il n'y a plus rien qui fonctionne...

    je pourrais par exemple mettre mes chemins en abolus ou qu'il parte de la racine, mais du coup je ne peux plus FACILEMENT réutiliser ces fichiers pour un autre site web... ou si mon site est comme ca : http://www.developpez.net/forums je ne peux pas utiliser le format depuis la racine car du coup je n'ai pas la bonne racine. (en imaginant que forums est un répertoire réel sur le serveur)

    Donc : comment faire pour dire a PHP (sans toucher au fichier de conf de php, car je dois pouvoir faire ca sans être admin du serveur) d'aller chercher mes includes à un certains endroits... voila.. merci

    J'espère que j'ai été assez clair... et si quelqu'un pense que ma méthode n'est pas bonne et qu'il connait quelque chose de plus adapté je suis ouvert à toute proposition qui pourrait m'aider un peu...

    Angel

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    tu peux modifier la liste des répertoires dans lequels php recherche des fichiers à inclure avec set_include_path.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Comme dis Eusebe, à ceci prêt qu'il faut modifier la conf de php pour cette solution. Il faudra juste regarder si c'est une option en PHP_INI_ALL qui indiquera que tu pourras en modifier la valeur à l'exécution, donc sans être admin.

    Sinon si cela concerne les classes, ressources diverses et variés.
    Tu peux définir un start_path. Que tu définiras en début de script, et que tu utiliseras au cours de tes scripts selon le besoin en faisant un bete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    include( (__START_PATH__)."/somewhere/else/somefile.php");
    Enfin précision qui ne concerne que les classes, tu peux utiliser autoload pour alléger un peu le bouzin.

    http://www.php.net/autoload

    bye

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Bonjour, et tout d'abord merci de me réponde

    J'étais également arrivé à la conclusion que le set_include_path était une solution mais reste quand meme qu'il faut créer un script qu'on doit appeller à chaque page... (on résout le problème en ne mettant qu'un seul script en absolut... ouais d'accord pourquoi mais c'est quand meme un peu dégeu, non ???)

    Sinon je connaissais aussi la solution de l'autoload, mais au final, en refléchissant bien j'avais trouvé que c'etait plutot une solution a éviter...

    il me reste plus qu'à lancer ce script à chaque page en ayant dedans la racine de mon site et en faisant de chdir et des set_include_path... (qui sont quant meme très souvent autorisé...)

    Enfin bref, merci pour tout et bonne soirée

    Angel

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    salut,

    autoload est très propre, en tout cas php ne te proposera pas de solution plus propre.

    Ensuite, la constante, ou le set_include_path, est une solution très propre. Sauf si effectivement tu fais DES chdir et DES set_include_path dans tous les sens. là sa devient crade.

    Avoir une constante bien définie, bien nommée, dans un fichier bien précis, bien documenter, n'a rien de sale.
    Le faire comme une cochon le rend sale.
    C'est tout le truc du php... Il n'y à personne derrière toi pour te proposer quelque chose de déjà clairmeent structuré et définit. A moins bien sur de prendre un fw... si il te plaise :!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    Bonjour,

    Je rencontre le même genre de soucis et je ne comprenais pas d'où cela pouvait venir.

    Ton post m'a éclairé.

    Je suis dans le même cas que toi et je cherche à organiser l'arborescence de mes fichiers php pour avoir une structure plus claire.

    Pourrais-tu me montrer à quoi ressemble le script que tu utilises avec le set_include_path ?

    voili voilou

    ++ et merci d'avance

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Une solution est apparue !!!!

    Je pense que c'est cette solution que je vais garder pour le développement de mes prochains projets (si je suis obligé d'utiliser du php ).

    Alors voila... suspense...qu'elle est-elle ????

    J'ai découvert en installant egroupware, ils utilisent les php_value dans un fichier .htaccess ce qui leur permettent de changer le include path pour tous leur application à un seul endroit sans avoir besoin de faire des appels par centaines à ce fichier...

    UN fichier, jamais appelé, c'est apache qui le gère, c'est propre, ça à l'air solide, ne dépend pas du développeur mais de l'installation que fait le provider de son serveur WEB, je pense que c'est la meilleure solution SI c'est possible...

    voila la ligne a mettre dans le fichier .htaccess

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php_value include_path ".:/usr/local/lib/php"
    bien sur en remplaçant le .:/usr/local/lib/php par les chemins désirés...
    je n'ai pas le fichier sur moi mais pour ceux qui veulent un exemple concret laissé un message après moi et je viendrai le poster...

    Et sinon pour ceux qui préfèrent la solution avec un fichier d'entete voici un exemple du fichier que j'appelle à chaque FICHIER que je fais... (tous sans exception)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $path = '/srv/http/www/MONSITE';
    $host = 'http://HOST/MONSITE';
    set_include_path(get_include_path() . PATH_SEPARATOR . $path);
     
    chdir($path);
     
    $conf['host'] = 'INFORMATION';
    $conf['lang_directory'] = 'lib/conf';
    $conf['lang_default'] = 'fr';
    $conf['default_path'] = $path;
    $conf['default_host'] = $host;
    ?>
    Du coup je me suis rajouté quelques informations utiles pour ce coup la... mais c'est pas comme ca que ca devrait être fait (en tout cas à mon gout, après....)

    Voila voila

    Merci à tout le monde d'avoir répondu à proposer des idées....

    Angel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/09/2006, 17h53
  2. Question sur les chemins des includes
    Par michka999 dans le forum Langage
    Réponses: 7
    Dernier message: 06/09/2006, 11h46
  3. question sur la gestion des css
    Par boustor dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 31/07/2006, 17h57
  4. Quelques questions sur la gestion des droits
    Par sylsau dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/03/2006, 15h11
  5. Question sur la gestion des fenetres MDI
    Par RémiONERA dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/07/2005, 08h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo