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

Utiliser stream_resolve_include_path au lieu de file_exists.

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. Pour cet exemple précis 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.