Articles

Le mois de la fonction PHP : tous les chemins

  • Ecrit par Damien Seguy
  • dimanche 08 avril 2007
Image pour le titre du contenu

This document is also available in English en 


L'utilisation des chemins absolus est fortement conseillés dans les applications qui manipulent des fichiers.

Cependant il n'est pas toujours facile de connaître l'arborescence du serveur qui héberge votre application et de plus celle-ci est ammennée à changer. De plus, si le chemin a transité par l'utilisateur, qu'il soit donné ou transmis, il est important de le valider pour qu'il ne se dédouble pas.

Une solution simple et rapide à mettre en place est l'utilisation de la fonction realpath() pour nettoyer le chemin absolu d'un fichier. De plus la fonction realpath() permet de résoudre les liens sympboliques.


Exemple n°1

<?php
    require_once realpath('../../config/application.conf.php');
?>
La fonction realpath() peut être couplé avec les fonctions dirname() (renvoi le nom du dossier d'un fichier) et basename() (renvoi le nom du fichier d'un chemin).

Exemple n°2

Mon fichier index.php doit inclure un fichier init.inc.php situé dans un dosser includes, lui même situé dans le même dossier que le fichier index.php.

L'arborescence est la suivante :

  • application/
  • includes/
    • init.inc.php
    • index.php
La première idée serait d'utiliser la manière suivante :

<?php
    require_once realpath('./includes/init.inc.php');
?>
Le problème de cette solution est que si l'inclusion est précédée d'un changement de dossier via la fonction chdir() par exemple, votre inclusion échouera.

Une solution pour résoudre ce problème est d'utiliser la variable __FILE__ qui retourne le nom du fichier dans lequel elle est appellée et la fonction dirname() qui va nous retourner le nom du dossier de ce fichier.

<?php
    /**
     * Changer le r&eacute;pertoire courant
     */
    chdir('../../'); 
    /**
     * Le <a href="http://www.php.net/chdir">chdir()</a> au dessus n'aura pas de cons&eacute;quence sur le chemin d'inclusion du fichier
     */
    require_once realpath(dirname(__FILE__) . './includes/init.inc.php');
?>
Exemple n°3

Enfin la fonction pathinfo() permet d'obtenir le chemin du fichier, le nom du fichier, ainsi que son extension.

<?php
    print_r(__FILE__);
    /**
     * Array
     * (
     *     [dirname] => /home/mon_compte/public_html
     *     [basename] => index.php
     *     [extension] => php
     *     [filename] => index
     */
?>
N'utilisez pas la fonction pathinfo() pour déterminer le type du fichier. Utilisez plutôt l'extension Fileinfo.

A mémoriser

< Précédent   Suivant >

Commentaires

Vous pouvez ajouter votre commentaire!


Vous devez vous connecter pour commenter