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
.