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 :

problème avec les chemins de répertoire


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut problème avec les chemins de répertoire
    Bonjour,

    Je m'énerve depuis 20 minutes à cause d'une crétinerie, il serait peut être temps que je comprenne le système une bonne fois pour toute.

    C'est simple, il s'agit de trouver le bon chemin pour inclure un fichier dans un autre.
    Nous avons :
    - DOSSIER PARENT : SCRIPT
    - Plusieurs fichier sont dans le dossier parent.
    - Le dossier Parent SCRIPT contient aussi plusieurs dossiers qui contiennent d'autre fichiers.

    - J'ai un fichier "bob.php" dans le sous dossier DICO, qui est dans le dossier SCRIPT.
    - J'ai un fichier "bingo.php" à l'intérieur du dossier SCRIPT.

    Je veux inclure le fichier bingo.php à l'intérieur de bob.php

    Si ça avait été l'inverse j'aurais fait /dico/bob.php.
    Mais là je n'y arrive pas.

    J'ai essayé à peu près tout:
    /bob.php
    ./bob.php
    ../bob.php
    /../bob.php
    /../bob.php
    ./../../bob.php

    J'ai pas encore essayer nomdeDieu/bob.php.

    C'est quoi l'astuce svp ?

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    bob est appelé directement ou inclus dans un autre .php ?

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once(dirname(__FILE__) .'/../bingo.php');
    Sinon l'utilisation de constantes est pratique :
    au début de lexecution de ton appli, tu dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define('SCRIPTS', '/path/to/scripts/');
    Ensuite quand tu fais l'include :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    require_once(SCRIPTS . 'bingo.php');
    require_once(SCRIPTS . 'dico/bob.php');
    ...
    sinon vive include_path

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Citation Envoyé par Swoög
    bob est appelé directement ou inclus dans un autre .php ?
    Je fais un require(../bingo.php) à l'intérieur de bob.php

    J'ai pas tout pigé au truc de Mr N, là je suis sur une histoire de feuille de style je me repenche sur le problème juste après, merci.

  5. #5
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    heu... tu m'as pas compris, le fichier bob.php il est appelé comment ?

    Mr N. te propose divers solutions pour retrouver ton fichier bingo.php

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 124
    Points : 159
    Points
    159
    Par défaut
    Si tu veux inclure un fichier X dans un fichier Y t'as 2 possibilités, la notation absolue ou la notation relative. Dans ton cas tu as essayé la notation relative (par rapport à l'emplacement du fichier bob.php donc). Tu aurais aussi pu utiliser la notation absolue ce qui donne quelque chose comme ça: require(C:/chemincomplet/bingo.php)

    Dans ton explication tu as essayé de donner l'emplacement de bob.php (par exemple en faisant ../bob.php) alors que tu voulais inclure le fichier bingo.php, ça ne fonctionnera forcément pas. Quand PHP lit le fichier bob.php et qu'il voit un include ou un require il veut savoir où se trouve le fichier (nommé bingo.php dans ton cas) et il va pas lancer une recherche dans toute l'arborescence de ton disque pour savoir... c'est à toi de lui indiquer.

    Pour remonter d'un étage faut utiliser "..", le "./" devant (./..) c'est pas obligatoire c'est juste une manière de montrer qu'on utilise la notation relative ("." signifie le répertoire courant).
    Si ton fichier est dans un répertoire parent tu dois écrire "../nomfichier", s'il est dans un répertoire encore en-dessus, tu dois écrire ../../nomfichier.

    Tu peux faire des tests en ligne de commande, suffit de te déplacer dans le répertoire du fichier bob.php et essayer, en une seule commande, d'arriver dans le répertoire de bingo.php. Tu y parviendras avec une commande du style:
    cd ..\..
    cd ..\rep
    cd ..\..

    Petit ajout: Ce que t'as expliqué la personne en-dessus c'est que tu peux utiliser une variable qui contient le chemin de base du répertoire contenant tes fichiers php. Si ces fichiers sont dans le répertoire script ou dans un de ses sous-répertoire alors tu définis une variable nommée "cheminbase" par exemple qui vaudra "c:\...\SCRIPT\". Ensuite tu utilises l'opérateur de concaténation (.) pour définir de manière absolue le chemin de tes includes/require. Ca donne des trucs comme cheminbase."/sousrepertoire/nomfichier".

    Bonne chance!

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Citation Envoyé par Swoög
    bob est appelé directement ou inclus dans un autre .php ?
    Bob est lui même inclu dans definition.php qui, comme bingo.php, se trouve directement dans le dossier SCRIPT.

    Donc on a bingo.php qui est inclu dans bob.php qui est inclu dans definition.php avec definition.php cote a cote avec bingo.php et bob.php dans le dossier Dico, tout cela étant dans le dossier SCRIPT.


    J'avais eu le problème une fois, donc là je viens d'essayer simplement require('bingo.php') dans bob.php puisque bingo.php se trouve à coté de définition.php qui est la page dans laquelle est en premier inclu bob.php.

    Mais ça foire encore.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Citation Envoyé par Swoög
    heu... tu m'as pas compris, le fichier bob.php il est appelé comment ?

    Mr N. te propose divers solutions pour retrouver ton fichier bingo.php
    j'ai pas pigé les trucs à Mr N, je vais me repencher dessus là

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    require_once(dirname(__FILE__) .'/../bob.php');
    Je viens d'essayer ça, ça fonctionne du premier coup.

    Si quelqu'un peut m'expliquer mot à mot, que je meurs moins c..

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    En fait ça donne le chemin absolu en allant chercher le nom du dossier parent c'est ça ?

  11. #11
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Supposons qu'on ait :
    /home/psychobob/www/scripts/bingo.php
    et
    /home/psychobob/www/scripts/dico/bob.php

    bob.php commence par inclure bingo.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    require_once(dirname(__FILE__) . '/../bingo.php');
    ...
    Décortiquons :
    __FILE__ est une constante magique qui prend le nom du fichier courant, ici c'est /home/psychobob/www/scripts/dico/bob.php puisqu'on est dans bob.php

    dirname($filename) retourne le répertoire dans lequel se trouve $filename. Attention ça ne travaille que sur des chaine de caractères, c'est indépendant de l'os. Donc le répertoire de /home/psychobob/www/scripts/dico/bob.php, c'est /home/psychobob/www/scripts/dico

    A ce chemin, on demande de remonter d'un niveau /../ puis on inclus ce qu'on veut, ici bingo.php mais ca aurait pu etre autre/repertoire/fichier.php ou encore un repertoire parent grace à ../

    C'est plus clair ?

    Mais je te conseille vivement de configurer correctement ton include_path, tu n'auras pas à faire toutes ces gymnastiques...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Plus clair j'en sais rien, intéressant c'est certain.

    Pour le include_path, je sais pas ce que c'est, si tu peux en dire deux mots ça m'intéresse. Mais je suis sur mutualisé, je crois pas que je peux y toucher.

  13. #13
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/01/2013, 13h29
  2. JasperReport problème avec les chemins relatif
    Par baradoss dans le forum Jasper
    Réponses: 3
    Dernier message: 15/07/2008, 09h15
  3. problème avec les répertoires
    Par petitange_lili dans le forum Langage
    Réponses: 15
    Dernier message: 15/03/2007, 19h14
  4. Problème avec les répertoires
    Par piloupolo dans le forum Delphi
    Réponses: 1
    Dernier message: 07/02/2007, 17h45
  5. []Problème avec les formulaires Outlook
    Par davidinfo dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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