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] question par rapport aux chemins


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut [Configuration] question par rapport aux chemins
    Salut a tous,

    j'ai une petite question à vous poser. Car je suis en train de m'arrancher les cheveux pour trouver une solution correcte. J'ai donc besoin de vous .

    Voilà, mon problème est par rapport aux chemins dans les sites. Il est conseillé d'utiliser des chemins relatifs pour une meilleurs portabilité (on peut les déplacer, il marcheront toujours correctement, alors qu'avec les chemins absolus il faut les redéfinir à chaque fois). En plus apparement il est plus lourd d'appeler un chemin absolu qu'un chemin relatif. (à cause du http).

    Le problème est que le site que je fais est beaucoup modularisé. Ce qui fait que j'ai des includes un peu partout. Le poblème viens lorsque je dois inclure un même fichier à partir de location différente.

    Par exemple prenons un fichier qui sera inclu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
         echo 'image/image.jpeg';
    ?>
    Si je l'appel à partir d'une page situé dans le repertoir racine ca marchera parfaitement. Par contre, si je l'appel à partir d'une page située dans un sous repertoire ca ne marchera plus (normal).

    Ma question est donc, est-ce que l'on peut se débrouiller pour avoir ses liens relatifs?

    Pour le moment j'ai crée une variable globale $rootpath que je met devant tout les chemins, j'ai donc des chemins absolus.

    Voilà, merci d'avance pour vos réponses!
    manganimes (en construction) -
    zemanga

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Points : 242
    Points
    242
    Par défaut
    Fait une variable rootpath du chemin de la racine relativement au script..
    Genre : $rootpath = '../../';

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Pour être sûr de ne pas redéfinir ta racine, je conseillerais même de la mettre dans une constante plutôt qu'une variable.

    Il y sûrement d'autres moyens imaginables, mais cette technique est très simple et tu pourras remarquer qu'elle est beaucoup utilisée, dans les scripts de forums par exemple.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  4. #4
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par Sékiltoyai
    Fait une variable rootpath du chemin de la racine relativement au script..
    Genre : $rootpath = '../../';

    En fait la j'ai définit ma variable rootpath dans un fichier de configuration que j'inclu dans toute les pages. L'avantage de cette méthode est que j'ai juste une ligne à changer pour redéfinir tout les chemins. Si je fait avec ta méthode il faut que redéfinisse $rootpath dans toute les pages, c'est pas très pratique :/.
    manganimes (en construction) -
    zemanga

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Points : 71
    Points
    71
    Par défaut
    Bien sur que non, ton $rootpath tu le redéfini seulement dans les scripts qui sont dans des sous-dossiers de ton site...

    Actuellement, je ne connais pas d'autres méthodes pour parer à ce probléme.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    dans mes développement, j'utilise un seul script qui se trouve à la racine du site donc je n'avais pas de problème de lien
    http://www.developpez.net/forums/sho...160#post449160

    Le problème est que la personne qui travaille avec moi a besoin d'autres fichiers dans des répertoires donc j'ai fini par utiliser le même système que toi. J'ai une valeur de configuration qui contient le chemin de l'application par rapport à la racine du serveur

  7. #7
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par big_ben3333
    Bien sur que non, ton $rootpath tu le redéfini seulement dans les scripts qui sont dans des sous-dossiers de ton site...

    Actuellement, je ne connais pas d'autres méthodes pour parer à ce probléme.
    J'ai que ma page d'index qui n'est pas dans un sous dossier, ca en reviens donc au même.

    Je sais pas si ca marche en mettant ../../ dans les pages concerné. Car si les pages inclusent en inclusent d'autres je sais pas comment ca se passera.


    Par exemple.

    j'ai ma page d'index.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    include('include/toto.php');
    include('include/toto2.php');
    ma page toto.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    include('toto2.php');
    Est ce que ca marchera comme ca?

    Du point de vu de la page toto.php c'est bon car elle est dans le même repertoire. Mais si j'appel la page toto.php d'une autre page qui est dans un autre repertoire, est ce que ca marchera ou bien est ce que l'appel devra être différent à chaque fois?
    manganimes (en construction) -
    zemanga

  8. #8
    Membre régulier
    Avatar de titoon
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par Death83
    En plus apparement il est plus lourd d'appeler un chemin absolu qu'un chemin relatif. (à cause du http).
    Attention à ne pas confondre :
    - URL (http://www.truc.com/include/toto.php), appelées via le wrapper d'URL, qui effectivement et un peu lourd et pas trop consseillé, mais utile si tu as besoin du code HTML généré par un script PHP sur un autre serveur
    - chemin du fichier sur le disque (/home/truc/include/toto.php ou c:\truc\include\toto.php) où il n'y a pas de différences significatives entre chemin relatif et absolu

    Dans le 2ème cas (ce dont tu as à priori besoin), tu peux utiliser une constante comme jlm94 l'explique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Code commun à tous les scripts :
    define('ROOTPATH', '/home/truc/');
     
    // Script lambda : quel que soit le chemin du fichier (dans un dossier de dossier de dossier), le chemin vers toto est bon
    include ROOTPATH . 'include/toto.php';

  9. #9
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Oki je vais essayer ca ce soir, par contre j'ai comme l'impression qu'il risque d'avoir un problème avec les chemins pour les images.
    manganimes (en construction) -
    zemanga

  10. #10
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Comme je le disait ca marche pas top. Enfin pour les includes ca marche mais avec les autres opérations ca ne marche plus.

    par exemple dans une page que j'inclu à différent niveau hiérarchique j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $oFCKeditor->Config['SkinPath'] = $sBasePath .'editor/skins/standard/' ;
    comment dois-je définir $sBasePath pour que ca marche quelque soit le repertoire d'appel?

    Avec le chemin sur le disque ca ne marche pas.
    manganimes (en construction) -
    zemanga

  11. #11
    Membre habitué Avatar de Cyberbob002
    Inscrit en
    Mai 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 140
    Points : 146
    Points
    146
    Par défaut
    Pour les liens publiés online ce mécanisme ne fonctionne pas. Tu dois alors définir une autre constante de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sBasePathOnline = 'http://ton.site.com/';
    D'ailleurs il est plus logique de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define ('BASE_PATH_ONLINE', 'http://ton.site.com/');
    car cette valeur ne changera pas !

  12. #12
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par Cyberbob002
    Pour les liens publiés online ce mécanisme ne fonctionne pas. Tu dois alors définir une autre constante de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sBasePathOnline = 'http://ton.site.com/';
    D'ailleurs il est plus logique de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define ('BASE_PATH_ONLINE', 'http://ton.site.com/');
    car cette valeur ne changera pas !
    Donc dans ces cas la on est obliger de passer par des requette http?
    Il y a pas moyen de se bébrouiller avec des chemins plus ou moins relatif?
    manganimes (en construction) -
    zemanga

  13. #13
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Bon j'ai mélangé les 2 alors.

    J'ai mis ca dans mes headers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $Repertoire_site='/repertoire/';
     
    define ("ROOTPATH" , $_SERVER['DOCUMENT_ROOT']);
    define ("ONLINE_ROOTPATH" , 'http://'.$_SERVER['SERVER_NAME'].$Repertoire_site);
    avec ROOTPATH utilisé pour les includes et ONLINE_ROOTPATH pour le reste.

    Cependant j'ai une dernière petite question.

    Pour une image ca en reviens au même niveau performance de faire:

    <img src="images/image.jpg" alt="#"/>

    et

    <img src="http://www.truc.com/images/image.jpg" alt="#"/>

    ?
    manganimes (en construction) -
    zemanga

  14. #14
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    J'opterais pour le première solution : pas de résolution de nom dans les DNS si le nom n'est pas dans le fichier hosts.

    Mais de toutes façons, je ne pense pas que ce soit visible ailleurs que dans un programme de bench.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  15. #15
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par jml94
    J'opterais pour le première solution : pas de résolution de nom dans les DNS si le nom n'est pas dans le fichier hosts.

    Mais de toutes façons, je ne pense pas que ce soit visible ailleurs que dans un programme de bench.
    En même je pense pas que la résolution de nom se fasse a chaque fois quand on navigue sur un site. (enfin j'espère).
    manganimes (en construction) -
    zemanga

  16. #16
    Membre régulier
    Avatar de titoon
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Points : 86
    Points
    86
    Par défaut
    Effectivement, j'ai pas pensé au cas des images
    Par contre, je ne pense pas qu'il y a une réellement une différence entre le chemin absolu et relatif (merci les cache DNS )

  17. #17
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Je relance mon post car j'ai un problème du au variables globales que j'ai utilisé (ROOTPATH et ONLINE_ROOTPATH).

    En effet, dans mon script j'utilise à plusieurs moment des if(file_exists(ROOTPATH...))

    Le problème est que ( je crois) que l'on ne peut utiliser d'adresse d'image absolue.

    Comment faire dans ce cas la? En sachant toujours que j'inclue ce fichier à plusieurs niveau hiérarchique différents dans mes repertoires.
    manganimes (en construction) -
    zemanga

Discussions similaires

  1. Question par rapport aux User stories
    Par ErEcTuS dans le forum Méthodes Agiles
    Réponses: 3
    Dernier message: 03/05/2010, 01h44
  2. Réponses: 6
    Dernier message: 29/10/2008, 22h06
  3. Quelques petites questions par rapport aux textures
    Par kev42100 dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 21/02/2008, 21h37
  4. [CSS] Aligner le texte par rapport aux puces de listes
    Par Invité dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 20/11/2005, 10h35
  5. [Choix] Quelles attentes par rapport aux SGBD ?
    Par thierry34 dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 13/07/2002, 20h08

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