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 :

[PHP-JS] Problème avec include


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut [PHP-JS] Problème avec include

    J'ai une page d'accueil dans laquelle je fais 3 include php : un pour le header (la balise head en fait), un pour le menu déroulant et un pour le footer.
    j'ai des rubriques et sous-rubriques qui sont classés par dossier (larborescence du site est celle des dossier en fait).

    On dit qu'il vaut mieux éviter les liens absolus or en faisant mes 3 includes dans chacunes de mes pages, je suis obligé de faire des liens absolus vers les CSS, les images, les javascript ... ou alors je suis obligé de les copier dans le répertoire de la page courante.

    La question est la suivante : que faire ?
    des liens absolus et si un jour le site change d'arborescence, je passe 1 mois à refaire tous mes liens (car ils risquent d'y avoir une énorme quantité de pages) ?
    des liens relatifs et je fait une copie dans chaque dossier ce qui est très très très très lourd ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Par défaut
    Si tu es en php,

    je te conseille de définir une constante qui représente le chemin absolu vers les répertoires qui t'interessent

    tu peux mettre ces constantes dans un fichier a la racine de ton domaine.
    tu inclus ensuite ce fichier dans toutes tes pages via un include
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  3. #3
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    je ne vois pas trop ce que tu veux dire là (j'ai l'impression que c'est une peu ce que je fait en fait).
    J'ai trouvé une solution qui me calcule le nombre de slash entre le dossier courant et le dossier de mon choix et qui, pour chaque slash, me concatène "../" à une variable ce qui me permet de remonter d'autant de dossier qu'il faut. Après il ne me reste plus qu'à mettre le chemin vers le dossier que je souhaite atteindre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $chemin_complet=$_SERVER['SCRIPT_FILENAME'];//Le chemin absolu vers le fichier contenant le script en cours d'exécution.
     
    $chemin_racine=substr($chemin_complet,strpos($chemin_complet,"dossier_au_choix")); //chemin entre le fichier courant et le dossier au choix
     
    $nb=substr_count($chemin_racine,"/");//$nb contient le nb de / contenu dans chemin (donc le nombre de dossier qu'il faut traverser avant d'arriver à MA racine web)
    $i=1; //boucle (elle commence à 1 car $nb contient un / de trop par rapport au nombre de dossier à traverser
    $up=""; //concaténation de 1 ou plusieurs "../" correspondant au nombre de fichiers à remonter pour arriver à la racine web
    while ($i<$nb) //pour chaque / dans chemin, on concatène un ../ dans up
    {
    	$up.="../";
    	$i++;
    }
    mais ça me parait bancal donc j'aurais voulu savoir s'il y avait une autre solution.

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?
    define("BASEDIRFILE","/var/www/dossier1/sousdossier1/");
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?
    include(BASEDIRFILE."fichier1.php");
    ?>

  5. #5
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    C'est exactement ce qu'il me fallait.
    C'est vraiment excellent ça, dommage que ça ne soit pas plus répandu sur le Net, j'ai regardé des tuto et tout et c'est jamais indiqué.
    Merci à toi Maitre des Chacals et à toi aussi Jos le Bisounours

  6. #6
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    re,
    j'ai "dé-résolu" car ça marche mais il y a un problème, ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include_once ( $_SERVER['SERVER_NAME'] . 'constant.inc' );
    me donne mon adresse e-mail or mon adresse e-mail et ma racine n'ont pas du tout le même nom.
    Il y a une solution ou je suis obligé de tout faire en dur?



    [edit]

    J'ai un fichier index.php qui contient ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include_once ("mon_chemin/constant.inc");
    include (ROOT."header.php");
    un fichier constant.inc contenant ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    define ( 'ROOT', 'https://www.mpl.ird.fr/IS/' );
    define ( 'CSS_PATH', ROOT.'style/' );
    define ( 'IMAGE_PATH', ROOT.'img_ur_vf/' );
    define ( 'JS_PATH', ROOT.'js/' );
    ?>
    et le fichier header.php qui contient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php include_once ("/data/www/www.mpl.ird.fr/Web_pole-science/constant.inc");
    	echo ("<link rel=\"stylesheet\" href=\"".CSS_PATH."text.css\" type=\"text/css\" />
    	<link rel=\"shortcut icon\" href=\"".IMAGE_PATH."logo.ico\"/>		
    	<script language=\"JavaScript\" src=\"".JS_PATH."trans_image.js\" type=\"text/javascript\"></script>
    	<script language=\"JavaScript\" src=\"".JS_PATH."menu_deroulant.js\" type=\"text/javascript\"></script>");
    	?>
    Suis-je obligé de rappeller include_once ("mon_chemin/constant.inc"); dans mon header.php ? (je pose la question car sur mon serveur local PHP 5.1.3 je ne le faisait pas et ça marchait et maintenant que je suis sur un serveur en ligne avec PHP 4.3.7 il faut que je le remarque dans le header sinon mes variables sont interprétées comme du texte.

  7. #7
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Par défaut
    non non, ce n'est pas ca ce que je dit...

    exemple:
    arborescence de ton site:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    .
    ..
    style[rep]
    image[rep]
    pages[rep]
    index.php
    constant.inc
    etc.
    constant.inc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    define ( 'ROOT', 'ton_nom_de domaine' );
    define ( 'CSS_PATH', ROOT . 'style/' );
    define ( 'IMAGE_PATH', ROOT . 'image/' );
    ?>
    Puis dans tes pages tu commences par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?php
    include_once ( $_SERVER['SERVER_NAME'] . 'constant.inc' );
    Si tu laisses constant.inc a la racine, tu peux maintenant utiliser ces constantes et ne maintenir que le fichier constant.inc si il y a une évolution dans ton arborescence
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

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

Discussions similaires

  1. [PHP-JS] Problème avec include
    Par Gunner4902 dans le forum Langage
    Réponses: 3
    Dernier message: 30/11/2007, 10h22
  2. [PEAR][DB] Problème avec include DB.php
    Par xclam dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 12/06/2007, 17h15
  3. [PHP-JS] problème avec include
    Par UN|X` dans le forum Langage
    Réponses: 4
    Dernier message: 08/03/2007, 16h57
  4. problèmes avec "include file" pour une page asp
    Par chipsense dans le forum ASP
    Réponses: 1
    Dernier message: 02/09/2005, 15h22

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