Принятый ответ Пекки неполон и в общем контексте вводит в заблуждение. Если файл указан как относительный путь, вызываемая языковая конструкция include
будет искать его следующим образом.
Во-первых, он пройдется по путям переменной окружения include_path
, которую можно установить с помощью ini_set
. Если это не удается, он будет искать в собственном каталоге вызывающего скрипта dirname(__FILE__)
( __DIR__
с php> = 5.3.). Если и это не удается, только тогда он будет искать в рабочем каталоге! Оказывается, по умолчанию переменная окружения include_path
начинается с .
текущего рабочего каталога. Это единственная причина, по которой он сначала выполняет поиск в текущем рабочем каталоге. См. Http://php.net/manual/en/function.include.php .
Файлы включаются на основе указанного пути к файлу или, если он не указан, указанного include_path. Если файл не найден в include_path, include, наконец, проверит собственный каталог вызывающего скрипта и текущий рабочий каталог перед ошибкой.
Итак, правильный ответ на первую часть вопроса состоит в том, что не имеет значения, где находится включенный вызывающий скрипт. Ответ на последнюю часть вопроса заключается в том, что исходный рабочий каталог в контексте веб-сервера - это каталог вызываемого скрипта, скрипта, который включает в себя все остальные, пока обрабатывается PHP. В контексте командной строки исходный рабочий каталог - это то, что он есть, когда php вызывается в командной строке, не обязательно каталог, в котором находится вызываемый скрипт. Однако текущий рабочий каталог можно изменить во время выполнения с помощью функции PHP chdir
. См. Http://php.net/manual/en/function.chdir.php .
Этот абзац добавлен для комментариев к другим ответам. Некоторые упомянули, что использование в системе include_path
менее надежно и поэтому предпочтительнее использовать полные пути, такие как ./path
или __DIR__ . /path
. Некоторые дошли до того, что полагаться на сам рабочий каталог .
небезопасно, потому что его можно изменить. Однако иногда вам нужно полагаться на ценности среды. Например, вы можете указать include_path
пустое значение, чтобы каталог вызывающего скрипта был первым местом, в котором он будет искать, даже до текущего рабочего каталога. Код может быть уже написан и регулярно обновляться из внешних источников, и вы не хотите повторно вставлять префикс __DIR__
каждый раз при обновлении кода.