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 :

Définir le chemin de la racine du site


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut Définir le chemin de la racine du site
    Bonjour tout le monde,
    J'étudie plusieurs CMS tel que Joomla ou Wordpress, pour m'en inspirer et apprendre à bien coder en PHP.
    Une technique qui est récurrente et que je ne comprend pas, c'est d'utiliser la fonction dirname(__FILE__) avant d'inclure tout script.
    Par exemple :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once( dirname(__FILE__) . '/script.php' );
    Pourquoi ne font-ils pas seulement :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once( './script.php' );
    Y a t-il une morale derrière?
    Merci

  2. #2
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    dirname permet au code d'être plus portable étant donné qu'il s'appuie sur le système pour faire les bonnes transformations des chemins étant donner qu'il existe parfois certaines différences des plateformes. Exemple les chemins windows utilises "\" comme séparateur dossier-fichier tandis sur les systèmes basés sur unix/linux c'est plutôt "/".
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Sauf que justement, PHP, comme d'autres langages scriptés, accepte / pour Windows comme *n*x.

    Avec dirname(__FILE__) on se base sur le chemin du script lui-même (celui qui est entrain d'être exécuté).

    Avec './script.php', ce n'est pas du tout la même chose : script.php est cherché dans le répertoire courant.

    Prenez cet exemple : soit un programme composé de deux scripts /var/www/offline/jobs/balayette.php et /var/www/offline/libs/db.php (que le premier doit inclure).
    Il est appelé de la sorte :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # pwd
    /home/julp
    # php /var/www/offline/jobs/balayette.php
    Si /var/www/offline/jobs/balayette.php contient :
    • require_once('../libs/db.php') : ça ne fonctionnera pas car PHP va chercher /home/julp/../libs/db.php (donc /home/libs/db.php) puisque le chemin est relatif au répertoire courant
    • require_once(realpath(dirname(__FILE__) . '../libs/db.php')) : ça marchera dans tous les cas, puisqu'on ne dépend pas du répertoire courant

    Mais en contexte web, le répertoire courant est modifié pour celui du script de départ (un équivalent de chdir(dirname(__FILE__))). Ce qui facilite les choses et explique que vos deux écritures soient, au final, équivalentes.

    La méthode portable est de se baser sur dirname(__FILE__) : elle fonctionne également en CLI et en contexte web. On peut être tenté d'utiliser $_SERVER['DOCUMENT_ROOT'] en contexte web mais celle-ci peut donner une valeur qui ne correspond pas à ce qu'on attend (dans les cas notamment où l'on fait intervenir un Alias, le module Userdir ou encore un VirtualDocumentRoot pour rendre accessible son site).

  4. #4
    Membre confirmé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Points : 496
    Points
    496
    Par défaut
    Merci pour vos réponses. Résolu

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

Discussions similaires

  1. Définir la racine du site
    Par Marty76 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 07/05/2013, 14h27
  2. Récupérer le chemin de la racine de mon site en local
    Par dalalbay dans le forum Langage
    Réponses: 2
    Dernier message: 14/08/2012, 15h58
  3. Chemin d'accès depuis la racine du site
    Par frouppy dans le forum Mise en page CSS
    Réponses: 17
    Dernier message: 06/07/2012, 16h03
  4. [PHP 5.0] Racine du site - Chemin relatif
    Par Junior_jef dans le forum Langage
    Réponses: 3
    Dernier message: 12/08/2010, 12h07
  5. Réponses: 6
    Dernier message: 28/09/2004, 16h47

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