[HTML/PHP] inclure une page avec des fichiers

Autres projets et contributions
Répondre
djipey
Chu Ko Nu
Messages : 437
Inscription : sam. 04 juin 2011, 10:13

[HTML/PHP] inclure une page avec des fichiers

Message par djipey »

Bonjour.

Je développe actuellement un site web et je rencontre un petit problème.

À la racine de mon site, j'ai les fichiers/dossiers suivants: include/, images/, L1/, index.php, cours_index.php.

Dans le dossier L1, j'ai une page coursL1.php, qui fait appel grace à un include, au fichier header.php qui se trouve dans le dossier include (donc dossier parent). Ce fichier header.php fait quant à lui appel à une image du dossier images.

Le truc c'est que du coup, quand je vais sur /L1/coursL1.php, je n'arrive pas à avoir l'image du header. Je peux bidouiller les chemins pour avoir le texte du header, mais pas l'image. Est ce que vous auriez une astuce pour contrer ça? (Autre que copier-coller le code html du header dans toutes les pages, j'en ai une cinquantaine dans le même genre).

Je vous mets les codes des fichiers pour que cela soit plus clair:

/include/header.php

Code : Tout sélectionner

<header>
        <a href="index.php"> <img src="images/logo.png" alt="logo_large" class="logo"/> </a>
        <p class="p_header"> Bienvenue sur le site du Bureau Des Étudiants de Chimie de l'Université Valrose ! </p>
</header>

/cours_index.php

Code : Tout sélectionner

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>B.D.E. Chimie de Nice - Valrose</title>
    </head>

    <body>
        <?php include("include/header.php"); ?>
        <?php include("include/menu.php"); ?>

        <section class="article">
            <a href="L1/coursL1.php" class="bouton_cours" >  SM 1ère année </a><br>
            <a href="L2/coursL2.php" class="bouton_cours" > SM 2ème année </a><br>
            <a href="L3/coursL3.php" class="bouton_cours" > Licence Chimie 3ème année </a><br>
            <a href="M1/coursM1.php" class="bouton_cours" > Master Chimie 1ère année </a><br>
            <a href="M2/coursM2.php" class="bouton_cours" > Master Chimie 2ème année </a>
        </section>
    </body>
</html>
/L1/coursL1.php

Code : Tout sélectionner

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="../style.css" />
        <title>B.D.E. Chimie de Nice - Valrose</title>
    </head>

    <body>

        <?php include("../include/header.php"); ?>
        <?php include("../include/menu.php"); ?>
    
    
        <section class="article">
            <article>
                <h1> Cours de Licence Science de la Matière 1ère année </h1>
                    <p class="p_accueil">
                        La section sera mise à jour dès que les premiers cours nous seront parvenus !</br>
                        Vous pouvez toujours nous envoyer les cours non disponibles à <a href="mailto:mail@bdechimie.fr">mail@bdechimie.fr</a> pour nous faire gagner du temps !</br>
                    </p>
            </article>
        </section>

    </body>
</html>
Cordialement.
Dernière modification par djipey le ven. 30 déc. 2011, 20:43, modifié 1 fois.
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [HTML/PHP] inclure une page avec des fichiers

Message par FoolEcho »

Le hic est que tu ne nous as pas indiqué le bon contenu pour le fichier header.php (c'est le même que cours_index.php). :copain:
Sinon, je pense que tu auras les indications de ce qu'il se passe en observant simplement le code html produit lorsque tu tentes d'intégrer ton image (coquille dans la syntaxe, mauvais chemin, espaces ou caractères spéciaux à gèrer, etc.). :chinois:
«The following statement is not true. The previous statement is true.» :nage:
djipey
Chu Ko Nu
Messages : 437
Inscription : sam. 04 juin 2011, 10:13

Re: [HTML/PHP] inclure une page avec des fichiers

Message par djipey »

Quel imbécile je suis...C'est corrigé.

Je sais exactement ce qu'il se passe en fait: /L1/coursL1.php appelle /include/header.php, qui lui même utilise avec de l'html /images/logo.png.
Mais une fois l'include fini, le chemin pour logo.png n'est pas le bon dans la page. Je voudrais pouvoir trouver une solution pour que cela marche en local, et sur mon serveur distant.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [HTML/PHP] inclure une page avec des fichiers

Message par benjarobin »

Pourquoi ne pas tout simplement mettre <img src="/images/logo.png" ... /> au lieu de <img src="images/logo.png" ... />
La seul condition pour que cela fonctionne toujours c'est que le dossier image soit toujours à la racine de ton site (Tu ne pourras pas déplacer le tout dans un sous dossier)
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [HTML/PHP] inclure une page avec des fichiers

Message par FoolEcho »

Un peu plus souple sans pour autant se casser la tête: utiliser $_SERVER["SERVER_NAME"] ou $_SERVER["SERVER_ADDR"] qui te donne le nom du serveur ou son adresse (à condition que le serveur donne ces infos ce qui devrait être le cas, c'est dans les spécifications il me semble... au moins pour SERVER_NAME).

Code : Tout sélectionner

<?php

echo("<a href=\"index.php\"> <img src=\"http://".$_SERVER["SERVER_NAME"]."/puis/le/chemin/vers/le/site/qui/renferme/images/logo.png\" alt=\"logo_large\" class=\"logo\"/> </a>
        <p class=\"p_header\"> Bienvenue sur le site du Bureau Des Étudiants de Chimie de l'Université Valrose ! </p>

?>
Sinon, méthode de lâche :mrgreen: : déplacer ton index au même niveau que les autres... :sifflote2:
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [HTML/PHP] inclure une page avec des fichiers

Message par benjarobin »

@FoolEcho Ta solution est pire que la mienne...
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [HTML/PHP] inclure une page avec des fichiers

Message par FoolEcho »

Oui et non. Si tout est casé dans un répertoire/site (comme ça devrait être le cas), ça ne change pas grand-chose... J'suis d'accord que garder les chemins relatifs est le mieux, mais être consigné à la racine du serveur c'est ballot aussi s'il y a d'autres choses aménagées à côté (bonjour la maintenance)...
... ou alors faut déterminer à chaque fois d'où le script est lancé, de façon à adapter le chemin, c'est un peu laid aussi. Ceci dit, ça peut se faire sans calculs savants: par défaut, on dit que l'étage est "../images", sauf cours_php qui passerait la variable à "./images").

Franchement, je mettrai cours_index.php au même niveau que les autres... :)

Et puis d'abord, c'est le week-end, la fin de l'année, tout ça... :mrgreen: :copain:
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [HTML/PHP] inclure une page avec des fichiers

Message par benjarobin »

Mais FoolEcho mon chemin est absolue ! Mon chemin n'est pas relatif du tout :-)
Tu devrait réviser le HTML :) Tu as 3 types de chemin :
- Le relatif : Ne commence jamais avec /
- L'absolue : Commence toujours avec /
- Le lien "externe" ou absolue avec adresse web/ip du site
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
djipey
Chu Ko Nu
Messages : 437
Inscription : sam. 04 juin 2011, 10:13

Re: [HTML/PHP] inclure une page avec des fichiers

Message par djipey »

Je ne peux pas déplacer mon index au même niveau que les autres. Enfin si, mais je ne règle pas le problème. Mon site est pour un bureau des étudiants.
J'ai une page cours_index qui redirige vers un autre index dans une année d'étude (un dossier: L1, L2), cet autre index comprendra toutes les matières de l'année. Cela peut aller jusqu'à une quinzaine de matière. D'où la nécessité de faire des dossiers.

Ensuite moi j'aimerais bien faire "/images/logo.png", mais le problème c'est quand je teste le site chez moi, en local. Mon dossier de test est ici: /opt/lampp/htdocs/tests. Je ne veux pas avoir à modifier toutes les pages avant d'uploader le site sur le serveur.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [HTML/PHP] inclure une page avec des fichiers

Message par benjarobin »

Dans dans ce cas c'est assez simple tu ajoutes un fichier de config PHP qui spécifie le chemin vers le dossier images.
Sinon tu peux le faire en 100% auto en bricolant avec les variables $_SERVER de php http://php.net/manual/fr/reserved.variables.server.php
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
djipey
Chu Ko Nu
Messages : 437
Inscription : sam. 04 juin 2011, 10:13

Re: [HTML/PHP] inclure une page avec des fichiers

Message par djipey »

Évitons le bricolage, je ne suis pas très fort.

Tu peux détailler le principe du fichier de config php? Ça m'a l'air simple.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [HTML/PHP] inclure une page avec des fichiers

Message par benjarobin »

Tu créer un fichier nommé un peu comme tu veux, par exemple config.php

Code : Tout sélectionner

<?php
//Chemin ne devant pas se terminer par un /
define('PATH_ROOT_TO_APP', ''); // Chemin pour la 'prod'
//define('PATH_ROOT_TO_APP', '/tests'); // Pour tes tests
?>
Puis tu modifie tous tes fichiers php et tu rajoute en entête ceci (Juste après <?php)

Code : Tout sélectionner

require_once('chemin_vers_config.php');
Puis il suffit ensuite d'utiliser la constante pour définir le chemin de l'image

Code : Tout sélectionner

<img src="<?php echo PATH_ROOT_TO_APP ?>/images/logo.png" ... />
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
djipey
Chu Ko Nu
Messages : 437
Inscription : sam. 04 juin 2011, 10:13

Re: [HTML/PHP] inclure une page avec des fichiers

Message par djipey »

Ok. Ça se fait.

Puis tu modifie tous tes fichiers php et tu rajoute en entête ceci (Juste après <?php)
require_once('chemin_vers_config.php');
Je dois donc modifier absolument tous mes fichiers et leur rajouter ce petit bout de php. Et le chemin vers config.php peut être donné en relatif avec des ../ . Mouais au final..

Et avec une variable serveur? Il n'y en a pas une qui donne la racine? (lampp, c'est apache comme serveur, et je suis hebergé chez OVH: serveur linux, et apache). Est ce que ça pourrait être plus simple?
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [HTML/PHP] inclure une page avec des fichiers

Message par benjarobin »

Je ne suis pas sûre de comprendre le problème. Dans tous les cas tu dois modifier tous tes fichier PHP ? non ?
S'il n'y a que le fichier header qui contient une image pointant vers le dossier image alors je ne comprend pas pourquoi tu ne modifie pas uniquement ce fichier ? (Entre prod et test, même pas besoin de config.php)
Bref soit plus précis car j'ai peur de ne plus te suivre
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
djipey
Chu Ko Nu
Messages : 437
Inscription : sam. 04 juin 2011, 10:13

Re: [HTML/PHP] inclure une page avec des fichiers

Message par djipey »

Oui, je m'embrouille un peu aussi, je suis fatigué.

C'est ça, si je ne dois modifier que le fichier header, c'est cool.

FoolEcho proposait ça:

Code : Tout sélectionner

echo("<a href=\"index.php\"> <img src=\"http://".$_SERVER["SERVER_NAME"]."/puis/le/chemin/vers/le/site/qui/renferme/images/logo.png\" alt=\"logo_large\" class=\"logo\"/> </a>
Mais je ne suis pas fan de $_SERVER["SERVER_NAME"], puisque ça donne un chemin externe. Il n'y a pas une variable serveur qui donne la racine?
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [HTML/PHP] inclure une page avec des fichiers

Message par benjarobin »

... As tu vu mon message ici : http://forums.archlinux.fr/post85311.html#p85311
Donc soit tu met ceci <img src="/images/logo.png" ... /> soit <img src="/tests/images/logo.png" ... />
Pourquoi vous voulez faire compliqué ?
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
djipey
Chu Ko Nu
Messages : 437
Inscription : sam. 04 juin 2011, 10:13

Re: [HTML/PHP] inclure une page avec des fichiers

Message par djipey »

Lol j'avoue. J'ai fait nettement plus simple en fait. J'ai bougé le répertoire tests vers son répertoire parent, du coup il est à la racine de mon serveur en local. Plus du tout de problème, les chemins seront les mêmes partout (j'ai juste foutu en l'air l'interface de xampp, pas très grave).

Une dernière question: j'ai lu à plusieurs endroits que ce n'était pas bien de mettre des chemins absolus. Hors c'est exactement ce que je vais faire. Est ce que c'est mal?
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [HTML/PHP] inclure une page avec des fichiers

Message par FoolEcho »

benjarobin a écrit :Mais FoolEcho mon chemin est absolue ! Mon chemin n'est pas relatif du tout :-)
J'ai bien dit que je fatiguais. :oops:
djipey a écrit :Mais je ne suis pas fan de $_SERVER["SERVER_NAME"], puisque ça donne un chemin externe. Il n'y a pas une variable serveur qui donne la racine?
djipey a écrit :Et avec une variable serveur? Il n'y en a pas une qui donne la racine?
$_SERVER["DOCUMENT_ROOT"]... ça revient au même que d'employer l'une des autres que j'ai proposé. Quitte à employer des chemins absolus autant qu'ils soient semi-automatiques justement plutôt que d'être contraint de tout mettre à la racine du serveur. Il suffit alors que le serveur de test abrite la même hiérarchie que celui de production, c'est un moindre mal (c'est un poil plus satisfaisant que de tout caser à la racine -- trop problématique si ton serveur a une hiérarchie complexe --, mais ça n'est pas une bonne pratique non plus).
djipey a écrit :Une dernière question: j'ai lu à plusieurs endroits que ce n'était pas bien de mettre des chemins absolus. Hors c'est exactement ce que je vais faire. Est ce que c'est mal?
C'est mal dans le sens où si c'est mal fait, c'est un nid à problèmes (essentiellement de maintenance: si le site est déplacé par l'administrateur). L'idéal est d'avoir ton site qui tient dans un répertoire (avec sous-répertoires bien entendu) et que le simple fait de le placer n'importe où sur ton serveur ne change rien à son comportement précisément car tous les chemins sont en relatif.
À partir du moment où on dit que le répertoire doit être à tel endroit, ça devient un problème.
C'est pourquoi je le redis: tu rajoutes un répertoire accueil par exemple et tu places ton cours_index.php dedans (tes scripts qui vont inclure l'header seront donc bien au même niveau) et au niveau serveur c'est lui le point d'entrée de ton site, peu importe à quel étage il sera donc situé et on garde tout en relatif (... quand j'en vois qui font des procédures qui alourdissent le code «juste pour ça»).
«The following statement is not true. The previous statement is true.» :nage:
Répondre