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 :

Lien absolu en local


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Par défaut Lien absolu en local
    Bonjour,
    Dans un meme répertoire Je dispose d'un fichier index.php qui appelle un header comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include_once('header.inc.php'); ?>
    Dans le header se trouve un appel a une feuille de style comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        <link href="site.css" rel="stylesheet" type="text/css" />
    Quand je lance index.php tout fonctionne bien!

    J'ai également un répertoire enfant dans lequel se trouve un fichier index2.php qui a besoin du header se trouvant dans le répertoire parent. L'appel se fait comme ceci dans index2.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include_once('..\header.inc.php'); ?>
    Tout fonctionne, le header est appelé mais le link css ne se fait pas. En mettant les deux lignes de code suivantes dans le header cela fonctionne mais je pense que la méthode est mauvaise.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <link href="site.css" rel="stylesheet" type="text/css" /> 
    <link href="../site.css" rel="stylesheet" type="text/css" />
    Comment faire?
    Petite question subsidiaire:
    Je souhaite avoir une structure du type

    index.php
    rep1/index.php
    rep2/index.php

    Est ce un pb d'avoir plusieurs index dans un meme site?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    D'abord, il faut bien distinguer les 2 :

    1- d'un coté les include / require / include_once / require_once :
    • on peut utiliser __DIR__ / dirname(__DIR__) / ... (Constantes magiques) pour indiquer le chemin relatif REEL entre le fichier inclus et le fichier dans lequel il est inclus.

    Exemple d'arborescence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    index.php
    header.inc.php
     
    rep1 / index1.php
    rep2 / index2.php
     
    site.css
    .htaccess
    - dans index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include_once(__DIR__.'/header.inc.php'); ?>
    - dans index1.php ou index2.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include_once(dirname(__DIR__).'/header.inc.php'); ?>
    2- d'un autre coté, les attributs href="..." / src="..." :
    Comme tu as remarqué pour site.css, ce n'est pas le chemin relatif par rapport à header.inc.php qui compte, mais bien celui par rapport à index.php ou index1.php/index2.php (dans lesquels header.inc.php est inclus).

    Là, perso, j'utilise un chemin absolu, grâce à une CONSTANTE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // racine
    define('ROOT_HTTP',     'http://localhost:8080/www-racine-TEST/'); // (en local, il suffit de copier l'URL dans la barre d'adresse du navigateur)
    Et donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <link href="<?php echo ROOT_HTTP; ?>site.css" rel="stylesheet" type="text/css" />
    Quant au fait d'avoir plusieurs index.php (dans des dossiers différents), il n'y a pas de souci.

    Perso, à part celui à la racine, je mets dans ces index.php "enfants" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php // protection dossier
    header('location: ../index.php');
    exit;
    Ainsi, si on entre l'URL d'un dossier (sans préciser de fichier), on est redirigé vers l'index.php de la racine.

    N.B. Par sécurité, dans le fichier .htaccess (à la racine), on ajoute aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #--------------------------------------------------
    ## affichage des répertoires : désactiver la création automatique d'index
    options -indexes

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Par défaut
    Merci pour cette superbe réponse.
    Concernant le code a mettre dans .htaccess:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #--------------------------------------------------
    ## affichage des répertoires : désactiver la création automatique d'index
    options -indexes
    Te serait-il possible de m'éclaircir sur "options -indexes". Pourquoi cela sécurise?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Si dans la barre d'adresse, tu écris ......mon-site.com/rep1 :

    - SANS : ça affichera la liste des fichiers et dossiers contenus dans le dossier rep1
    - AVEC : ça affichera "accès interdit......"

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Par défaut
    merci pour la réponse. Juste une petite derniere pour la route.
    J'utilise ce code en local
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    define('ROOT_HTTP',     'http://localhost:8080/www-racine-TEST/'); // (en local, il suffit de copier l'URL dans la barre d'adresse du navigateur)
    Quel devrait-etre le code pour un site en production chez un hébergeur?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En production, ce sera :
    define('ROOT_HTTP', 'https://www.nom-du-site.com/');

    A priori, on devrait pouvoir mettre : (à tester)
    define('ROOT_HTTP', '/');

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

Discussions similaires

  1. lien relatif/lien absolu
    Par grodep dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 31/05/2010, 10h26
  2. [PHP 5.2] Convertir un lien absolu du file system en lien html
    Par oc_alex86 dans le forum Langage
    Réponses: 2
    Dernier message: 18/02/2010, 10h14
  3. [PHP 4] Lien absolu, relatif et menu dynamique
    Par senacle dans le forum Langage
    Réponses: 4
    Dernier message: 06/01/2009, 12h06
  4. [XHTML] Pb avec lien relatif et lien absolu
    Par trotters213 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/09/2006, 13h38

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