Tester l'existence d'un fichier dans l'include path

Utiliser stream_resolve_include_path au lieu de file_exists.

07 mai 2016

PHP permet de modifier le chemin d'inclusion "include_path" des fichiers. L'include path n'est toutefois pas pris en compte par toutes les fonctions de manipulation de fichiers : par exemple file_exists exige un chemin absolu complet.

Heureusement, la fonction stream_resolve_include_path permet de retrouver le chemin absolu vers un fichier simplement à partir de son nom et donc de tester son existence par la même occasion.

Prenons l'exemple d'une fonction d'autoload simpliste : elle prend en entrée le nom d'une classe et cherche l'existence d'un fichier se nommant comme cette classe avant de l'inclure.

Tester l'existence d'un fichier dans l'include path

function myAutoloader($className) {

        $fileName = $className . '.php';

        if (false !== ($filePath = stream_resolve_include_path($fileName))) {
                return include_once $filePath;
        }

        return false;
}

Notez que include, include_once, require et require_once savent résoudre l'include path, nous aurions pû simplement faire un "include_once $fileName".

Pour des raisons de performances, attention à ne pas utiliser stream_resolve_include_path au lieu de file_exists si ce n'est pas justifié. Je n'ai pas de benchmark précis sur le sujet mais je sais que c'est beaucoup plus coûteux.

A bientôt !

Par
Créateur et administrateur.

Dans la même catégorie

Formater un tableau pour CURLOPT_POSTFIELDS
Email avec pièce jointe en PHP
PHP : modifier les attributs privés d'un objet
Convertir récursivement un objet PHP en tableau
PHP : formater un tableau en CSV
Comment envoyer un mail en ligne de commande ?
RSYNC : Comment synchroniser des fichiers à travers une connexion ssh ?
Exécuter un code PHP en ligne de commande
Doctrine 2 : générer les classes PHP depuis la base de données
Comment catcher les erreurs en PHP ?
Doctrine 2 : comment afficher la requête SQL ?
Comment construire une URL sans caractères spéciaux en PHP ?
Comment lister les fichiers PHP inclus sur ma page ?
Les fonctions anonymes récursives en PHP
Requête HTTP asynchrone en PHP
La résolution statique à la volée ou Late Static Bindings
Trouver les jours fériés français en PHP
Comment allumer son ordinateur à distance en PHP ?
Comment utiliser la balise meta viewport ?
Une version mobile de mon site avec le Zend Framework
Doctrine et le Zend Framework : Présentation, intégration et utilisation
Créer son flux RSS simplement avec Zend_Feed
Appliquer un layout sur un mail avec le Zend Framework
Comment lancer une requête multi-bases avec les fonctions MySQL ?
Implode / Explode : Du tableau à la chaine de caractères, de la chaine de caractères au tableau

Commentaire(s)