В чем разница между getcwd и __DIR__?

DIR – волшебная константа, как указано в документах PHP . getcwd () – это только текущий рабочий каталог в соответствии с документами PHP .

Мой вариант использования:

// this is my index.php file require_once __DIR__ . '/vendor/autoload.php'; $app = new Silex\Application(); $app['debug'] = true; $app->get('/{name}', function($name) use($app) { return $app->sendFile(__DIR__ . '/web/source/index.php'); }); 

Я не совсем понимаю, почему мне нужен любой из этих механизмов, поскольку я должен просто использовать относительные пути.

Однако код выходит из строя.

__DIR__ – это текущий исполняемый файл.

getcwd() – это текущий файл php-файла, из которого выполняется текущий файл. Помните, что вы находитесь на сервере, а не на клиенте, и вам нужно помнить о том, с какого каталога вы работаете.

Это может измениться.

Подробнее см. Здесь .

Предположим, у вас есть сценарий

 <?php echo __DIR__, ' | ', getcwd(); include 'subdir/foo.php'; 

и он запускается в качестве основного скрипта (из-за запроса браузера или главного скрипта для вызова php-cli).
И subdir/foo.php тот же, за исключением include .

Вывод для основного скрипта может быть чем-то вроде

 /path | /path 

но вывод для subdir/foo.php если он включен в основной скрипт, будет

 /path/subdir | /path 

__DIR__ отражает каталог, в котором находится текущий файл сценария.
Но include () не изменил текущий рабочий каталог, поэтому выход getcwd () остается /path .