Include dans un sous dossier

Résolu
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je rencontre un sérieux problème avec mes sous dossiers.

si je met www.dossier.site.com j'obtiens une erreur 500 si je met dans mes
includes("../../page.php")
ou encore
include($_SERVER["DOCUMENT_ROOT"]."/page.php")
afin d'attacher mes pages.

Pourtant si j'accède à www.site.com/dossier tout fonctionne à merveille.
D'où peut venir le soucis svp ?

Merci de votre aide.
Cordialement

4 réponses

  1. Pitet Messages postés 2845 Statut Membre 530
     
    Oui il faut bien faire la différence entre le chemin depuis le système de fichier (protocole file) et le chemin depuis le serveur web (protocole http).

    Coté serveur, PHP peut accéder à tous les fichiers du serveur où il est exécuté directement via le système de fichier.
    Par exemple pour les fonctions php include, require, fopen sur un fichier du serveur, etc.

    Coté client, le navigateur de l'utilisateur n'as pas accès au système de fichier du serveur mais uniquement au serveur web via le protocole http.
    Dans ce cas il faut alors renseigner le chemin depuis la racine de ton site.

    On a donc deux constantes à utiliser selon que le chemin sera interprété par PHP (donc via le système de fichier) ou par le navigateur (donc via le serveur web). Par exemple :
    <?php 
    define('PATH_ROOT', '/home/lesite/www');
    define('URL_ROOT', 'http://www.lesite.com');
    ?>
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link type="text/css" href="<?php echo URL_ROOT; ?>/css/styles.css" rel="stylesheet" />
    
    <?php include(PATH_ROOT."/config.php"); ?>
    <?php include(PATH_ROOT."/inclusion/header.php"); ?>
    <?php include(PATH_ROOT."/inclusion/menu-haut.php"); ?>
    <?php include(PATH_ROOT."/inclusion/footer.php"); ?>
    
    1
  2. Pitet Messages postés 2845 Statut Membre 530
     
    Salut,

    Il s'agit d'un problème de chemin relatif :
    - http://www.php-astux.info/chemins-relatif-absolu.php
    - https://www.alsacreations.com/astuce/lire/78-quelle-est-la-diffrence-entre-les-chemins-relatifs-et-absolus.html

    Une solution classique est de définir une constante contenant le chemin absolu vers la racine de ton site, puis d'utiliser cette constante dans chaque appel de include/require.
    Par exemple :
    define('PATH_ROOT', '/var/www/monsite/');
    // ou pour windows :
    // define('PATH_ROOT', 'C:/wamp/www/monsite/'); 
    
    include PATH_ROOT . 'page.php';
    


    Bonne journée
    0
  3. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Bonjour Pitet et merci de t'occuper de mon soucis.

    J'ai fais les tests mais ça ne fonctionne pas.

    <?php
    echo $_SERVER["DOCUMENT_ROOT"];
    //Juste pour avoir le chemin absolu que j'écris en dur dans PATH_ROOT
    ?>
    
    <?php define('PATH_ROOT', '/home/lesite/www'); ?>
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link type="text/css" href="<?php echo PATH_ROOT; ?>/css/styles.css" rel="stylesheet" />
    
    <?php include(PATH_ROOT."/config.php"); ?>
    <?php include(PATH_ROOT."/inclusion/header.php"); ?>
    <?php include(PATH_ROOT."/inclusion/menu-haut.php"); ?>
    <?php include(PATH_ROOT."/inclusion/footer.php"); ?>

    Le fichier ouvert pour test est dans dossier.monsite.com

    J'ai sauté quelque chose ? :s
    0
  4. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Je comprends mieux à présent !

    Oulà tu me sauve mon vieux !
    J'ai testé et ça a fonctionné... mais juste une question, si je met le //monsite.com
    Le chargement de la page ne sera pas plus lourd que ../../ ?

    (Merci pour ta solution tout fonctionne très bien !)
    0