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

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Configuration] problème d'include à cause de l'arborescence


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut [Configuration] problème d'include à cause de l'arborescence
    bonjour,

    je doit faire des require dans mon index, seulement, ces require etait dans des dossier, donc il y a un "../" pour sortir du dossier et revenir a la racine, mais mon index?php et a la racine, mais je ne peut pas supprimer les "../" parceque il son utilisé sur d'autre pages, donc comment faire siouplait????


    merci

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    sert toi de $_SERVER["DOCUMENT_ROOT"]
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  3. #3
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Bonjour,

    Tu donnes des chemins relatifs avec des ../ mais ce n'est pas la bonne méthode; une méthode plus "propres" ( car ça te permet d'acceder à un include toujours de la même manière, quelque soit la page à partir de laquelle tu l'appelles ) est d'utiliser un chemin absolu, du type "/mondossierinclude/moninclude.inc"
    K

  4. #4
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Kilvaiden : pour moi l'inclusion par chemin relatif est bien plus propre que celle par chemin absolu.... je me vois mal ré-écrire tout un site juste parce que j'ai changé d'hebergeur...

    Perso j'utilise toujours les chemins relatifs.

    En fait j'inclus seulement mon framework de cette façon : (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require '../../framework/launcher.php';
    Et ce même launcher génèrera une constante K_ROOT contenant le bon chemin, en relatif. Ici : '../../'.
    Ensuite tous mes accès se basent sur cette constante. Si bien qu'au final je n'ai que le chemin du framework à saisir.


    Note : je pourrais également mettre le framework dans le path, histoire de n'avoir rien à saisir.
    Google is watching you !

  5. #5
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    encore faut il avoir la possibilité de changer le include_path
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Et quand il s'agit d'accéder à des scripts js ou à des images communes à partir de deux endroits situés dans des arborescences différentes par exemple, tu passes systématiquement par ton framework pour faire le lien ? Ta constante K_ROOT sera valable dans certains cas, mais pas dans tous ? Je ne comprend pas trop.

    Utilises-tu un framework que je pourrais consulter ?
    K

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    S' il y a bien un truc raté par PHP c'est les include/require. Utiliser des chemins relatifs ne peut entraîner que confusion, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /www/index.php
    /www/script-2.php
    /www/directory/script-1.php
    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php require 'directory/script-1.php' ?>
    directory/script-1.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <p>Je suis dans directory/script-1.php</p>
    <?php require '../script-2.php' ?>
    script-2.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p>Je suis dans directory/script-2.php</p>
    Trouvez-vous normal que ce cas d'utilisation très simple et intuitif échoue ? Moi non.
    Alors pour éviter ce genre de problême je fais :

    inc/header.inc.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
        // Chemin absolu du répertoire parent (racine de l'appli)
        $root = realpath(dirname(__FILE__) . '/..') ;
        // Uniformisation nix/win
        $root = str_replace('\\', '/') . '/'  ;
     
        define('ROOT', $root) ;
    ?>
    Puis j'utilise un accès absolu pour chacune de mes inclusions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
        [...]
        require ROOT . 'repertoire/ssrepertoire/script.php' ;
    ?>
    - L'appli fonctionnera qque soit la config de l'hébergeur
    - Pas besoin de toucher à ce truc qui ne devrait pas exister qu'est include_path
    - Je suis sûr que cela fonctionnera dans tous les cas
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  8. #8
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    siddh : ouep, c'est aussi pour ça que pour le moment je préfère saisir le chemin du framework.

    Kilvaiden : à partir de cette constante K_ROOT, il est assez facile de créer une deuxième constante représentant la racine du site web.... et donc de tout référencer depuis cette adresse.


    Par exemple, actuellement avec un site qui utilise une arborescence crée par plesk :
    /xxx/monsite.tld/httpdocs racine du site web www.monsite.tld)
    /xxx/monsite.tld/framework dossier où le framework est installé. Inaccessible depuis le web
    /xxx/monsite.tld/subdomains/admin/httpdocs racine du sous domaine admin.monsite.tld

    la constante K_ROOT va donc pointer vers /xxx/monsite.tld/framework.

    Je prends le cas du script : /xxx/monsite.tld/httpdocs/forum/view.php
    Il va inclure le framework, qui va déclarer la constante K_ROOT avec la valeur '../../framework/'.

    Et si je prends le cas du script : /xxx/monsite.tld/subdomains/admin/httpdocs/user/delete.php
    La constante K_ROOT aura la valeur '../../../../framework/'.

    Dans les 2 cas, je peux me créer une constante K_WEB_ROOT en ajoutant '../httpdocs/' à K_ROOT

    Et au final, si un script veut par exemple lire l'image 'toto.jpg' dans le dossier 'images/avatar' du site web, il utilisera cette adresse : K_WEB_ROOT.'images/avatar/toto.jpg', et ce, depuis n'importe quel script du site.


    Je ne sais pas si ça correpond aux besoins de tout le monde, mais ça correspond à tous les miens.
    Ainsi le même site fonctionne en local comme sur plusieurs serveurs différents, sans modification... enfin, sauf si on déplace le framework par rapport au reste.

    Sinon désolé, c'est un "mini" framework maison... non consultable (pour le moment en tous cas).
    Google is watching you !

  9. #9
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Seb : ouep, c'est ce que je faisais au début... puis j'ai eu des problèmes avec certains serveurs (chez free entre autre) qui n'acceptaient pas le realpath()... Du coup ma constante contient un chemin relatif au lieu d'un chemin absolu, mais ça revient au même.
    Google is watching you !

Discussions similaires

  1. [Configuration] Problème avec un script de login utilisant une session
    Par HNT dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 27/09/2005, 19h56
  2. problèmes avec "include file" pour une page asp
    Par chipsense dans le forum ASP
    Réponses: 1
    Dernier message: 02/09/2005, 15h22
  3. [JSP] problème d'include ou d'import
    Par lipao17 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 06/04/2005, 13h39
  4. Problème d'addition à cause des NULL
    Par Oluha dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/03/2005, 13h53
  5. Problème d'include sous Dev-c++ 4.9.8.0
    Par Argonz dans le forum Dev-C++
    Réponses: 16
    Dernier message: 20/11/2003, 17h36

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