web-dev-qa-db-fra.com

Pourquoi inclure __DIR__ dans le require_once?

Par exemple, je vois toujours des autoloaders appelés comme ceci:

require_once __DIR__ . '/../vendor/autoload.php';

Quelle est la différence entre cela et le plus concis

require_once '../vendor/autoload.php';

?

15
Dan Goodspeed

Les scripts PHP s'exécutent par rapport au chemin actuel (résultat de getcwd()) et non au chemin de leur propre fichier. L'utilisation de __DIR__ force l'inclusion à se produire par rapport à son propre chemin.

Pour démontrer, créez les fichiers suivants (et les répertoires):

- file1.php
- dir/
   - file2.php
   - file3.php

Si file2.php inclut file3.php comme ceci:

include `file3.php`.

Cela fonctionnera bien si vous appelez file2.php directement. Cependant, si file1.php includes file2.php, le répertoire en cours (getcwd()) sera incorrect pour file2.php, de sorte que file3.php ne pourra pas être inclus.

19
Evert

Pour inclure, il est possible de définir certains dossiers dans lesquels PHP effectue une recherche automatique. Lorsque vous incluez un fichier avec un chemin relatif, vous effectuez une recherche dans tous ces dossiers. Il est préférable de définir le chemin réel pour éviter certaines erreurs lors du chargement de mauvais fichiers. 

https://secure.php.net/manual/en/function.set-include-path.php

Ensuite, vous pouvez être sûr de charger le bon fichier. 

0
René Höhle