For example, I always see autoloaders called like this:
require_once __DIR__ . '/../vendor/autoload.php';
What is the difference between that and the more concise
require_once '../vendor/autoload.php';
?
PHP scripts run relative to the current path (result of getcwd()
), not to the path of their own file. Using __DIR__
forces the include to happen relative to their own path.
To demonstrate, create the following files (and directories):
- file1.php
- dir/
- file2.php
- file3.php
If file2.php
includes file3.php
like this:
include `file3.php`.
It will work fine if you call file2.php
directly. However, if file1.php
includes file2.php
, the current directory (getcwd()
), will be wrong for file2.php
, so file3.php
cannot be included.
For include its possible to set some folders where PHP search automatically. When you include a file with a relative path you search in all of that folders. Its better to define the real path to prevent some errors in loading wrong files.
https://secure.php.net/manual/en/function.set-include-path.php
Then you can be sure that you load the correct file.
来源:https://stackoverflow.com/questions/32444572/why-include-dir-in-the-require-once