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 :

Chemin relatif, / manquant


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 29
    Points
    29
    Par défaut Chemin relatif, / manquant
    Bonjour,

    je rencontre ce souci : la construction d'un chemin relatif ne se fait pas correctement, il manque un /.

    Voici mon arborescence de fichiers :
    /var/www/outils/annuaire/index.php
    /var/www/outils/annuaire/config.php
    /var/www/outils/configs/acces.inc.php (config partagé par plusieurs outils)

    Dans Index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once "config.php";
    Dans config.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once("../configs/acces.inc.php");
    je dois donc remonter d'un cran pour trouver le dossier config et accéder à acces.inc.php.
    Mais ça ne fonctionne pas, j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [30-Oct-2015 10:46:57] PHP Warning:  require_once(/var/wwwoutils/configs/acces.inc.php): failed to open stream: No such file or directory in /var/www/outils/configs/needed/class.htmlinterface.php on line 9
    [30-Oct-2015 10:46:57] PHP Fatal error:  require_once(): Failed opening required '/var/wwwoutils/configs/acces.inc.php' (include_path='.:/usr/share/php:/usr/share/pear:/var/www/outils:/var/www/outils/configs') in /var/www/outils/configs/needed/class.htmlinterface.php on line 9
    On voit bien qu'il "zappe" le / entre www et outils. Pourquoi ?
    J'ai essayé avec cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once($_SERVER['DOCUMENT_ROOT']."/outils/configs/acces.inc.php");
    Idem. (avec ou sans / )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [30-Oct-2015 10:52:46] PHP Warning:  require_once(/var/wwwoutils/configs/acces.inc.php): failed to open stream: No such file or directory in /var/www/outils/configs/needed/class.htmlinterface.php on line 9
    [30-Oct-2015 10:52:46] PHP Fatal error:  require_once(): Failed opening required '/var/wwwoutils/configs/acces.inc.php' (include_path='.:/usr/share/php:/usr/share/pear:/var/www/outils:/var/www/outils/configs') in /var/www/outils/configs/needed/class.htmlinterface.php on line 9
    Et si j'ai le vice de mettre un point devant le / incriminé, comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once($_SERVER['DOCUMENT_ROOT']."./outils/configs/acces.inc.php");
    D'un coup, il me retrouve le / !!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [30-Oct-2015 10:53:25] PHP Warning:  require_once(/var/www./outils/configs/acces.inc.php): failed to open stream: No such file or directory in /var/www/outils/annuaireEtbs/config.php on line 9
    [30-Oct-2015 10:53:25] PHP Fatal error:  require_once(): Failed opening required '/var/www./outils/configs/acces.inc.php' (include_path='.:/usr/share/php:/usr/share/pear:/var/www/outils:/var/www/outils/configs') in /var/www/outils/annuaireEtbs/config.php on line 9
    Et si j'enlève juste le point, le / disparait.

    Ce code fonctionne parfaitement sur un autre serveur (on change de serveur physique). On a donc réinstaller le sytème à l'identique pour un parfaite compatibilité, mais ça ne fonctionne pas Why ?

    Merci de votre aide.

  2. #2
    Membre averti Avatar de Amélie Ladoque
    Inscrit en
    Novembre 2004
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 250
    Points : 309
    Points
    309
    Par défaut
    Ca devrait mieux marcher avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once($_SERVER['DOCUMENT_ROOT']."/outils/configs/acces.inc.php");

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    il n'est pas forcément nécessaire de "redescendre" vers le ROOT :

    Dans Index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once ( __DIR__.'/config.php' );

    Dans config.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once( dirname(__DIR__).'/configs/acces.inc.php' );

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Sinon concernant $_SERVER['DOCUMENT_ROOT'], certains serveurs renvoient l'adresse avec un slash, et d'autres pas. Donc si tu veux l'utiliser et avoir un code générique tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $document_root = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/' ;

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    merci pour explications.

    Mon souci provenant de include sans / dans le fichier class.htmlinterface.php.

    Je retiens vos solution pour les chemins.

    merci !

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Salut,
    bon j'ai pas vraiment de soluce mais ton problème et sa résolution m'intéressent !
    A tout hasard est-ce que ce ne serait pas un problème d'encodage de fichier et/ou caractères invisibles ?
    De mon côté au-delà de ça je règle mes problèmes d'include hiérarchique en définissant une constante du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(localhost) {
    define("ROOT_PATH", "c:/wamp_ou_chepoakoi");
    }
    else {
    define("ROOT_PATH", "/var/www/ou_chepakoi");
    }
    comme ça plus de soucis de chemins relatifs lorsque des classes include d'autres classes, etc. et par ailleurs plus de prise de tête entre local et distant.

    [edit] J'avais pas vu que la discussion était résolue, du coup c'était quoi le problème ?
    Vive les roues en pierre

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

Discussions similaires

  1. Problème chemin relatif
    Par peipsy dans le forum Général Java
    Réponses: 6
    Dernier message: 24/06/2011, 15h36
  2. Problème chemins relatifs lors du déboguage
    Par jomeo dans le forum Visual C++
    Réponses: 5
    Dernier message: 03/04/2007, 16h04
  3. EasyPhp - Alias - Chemin relatif/absolu : problème
    Par Anne1969 dans le forum Langage
    Réponses: 5
    Dernier message: 30/03/2007, 10h16
  4. Réponses: 7
    Dernier message: 25/01/2007, 19h31
  5. [JSP] Include, problème de chemin relatif
    Par dafly dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/04/2004, 14h11

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