include
Выражение include включает и оценивает код файла как PHP-код.
Документация текущего раздела также относится к выражению require.
Файлы включаются на основе заданного пути к файлу или, если путь не указали,
на основе путей в директиве include_path.
Перед выдачей ошибки выражение include проверит директорию текущего скрипта,
в который включается файл, и текущую рабочую директорию, если PHP не нашёл файл
в списке путей директивы include_path.
Выражение include выдаст ошибку уровня E_WARNING,
если не найдёт файл; поведение отличается от выражения require,
которое выдаст фатальную ошибку E_ERROR.
Обратите внимание, при недоступности файла для чтения оба выражения выдадут дополнительную ошибку
уровня E_WARNING перед выдачей окончательной
ошибки уровня E_WARNING выражением include
или ошибки уровня E_ERROR выражением require,
которые возникают, когда PHP не находит файл.
PHP проигнорирует директиву include_path,
если указали абсолютный путь (который начинается с буквы диска,
или с обратного слеша \ в Windows и с прямого слеша /
в Unix- и Linux-системах) или путь относительно текущей директории (который начинается
с символа . или символов ..).
Например, парсер будет искать запрошенный файл в родительской директории,
если название файла начинается с ../.
Документация к директиве include_path
подробнее рассказывает об обработке языком PHP включаемых файлов и путей.
После включения код включаемого файла наследует ту же
область видимости переменных,
что и строка, на которой включили файл. Переменные, которые доступны на этой строке
во включающем файле, будут также доступны во включаемом файле.
Однако функции и классы, которые объявили во включаемом файле,
получат глобальную область видимости.
Простой пример подключения файла выражением include
test.php
]]>
Внутри функции, в которой включают файл, код включаемого файла ведёт себя так,
как будто его определили внутри функции; код последует области видимости переменных функции,
в которую включается. Исключение к этому правилу — магические константы, которые
выполняются парсером перед включением.
Включение внутри функции
]]>
После включения файла разбор переходит из режима PHP-кода
в режим HTML-разметки в начале и возобновляется
в конце включаемого файла. Поэтому код внутри включаемого файла,
который требуется выполнить как PHP-код,
оборачивают в корректные теги начала и конца PHP-кода.
PHP разрешает вместо локального пути указывать файлы для включения по URL-адресу,
если разрешили работу URL-обёрток с include-выражениями.
Файлы включают по HTTP-протоколу или через другие обработчики, которые поддерживает язык.
Список протоколов, которые поддерживаются PHP, приводит страница «».
Переменные передают в файл, который включается с удалённого сервера, в строке запроса URL-адреса
аналогично передаче аргументов методом GET по протоколу HTTP, если целевой удалённый сервер
интерпретирует целевой файл как PHP-код. Включение файла с удалённого сервера отличается
от включения файла, который наследует родительскую область видимости файла, в который включается;
скрипт выполняется на удалённом сервере, а результат затем включается в локальный скрипт.
Пример включения вывода, который сгенерировал скрипт удалённого сервера,
выражением include через HTTP-запрос
]]>
Предупреждение безопасности
Локальный сервер ожидает, что удалённый сервер создаст и вернёт допустимый PHP-код,
поскольку скрипт обрабатывается на локальном сервере,
даже если удалённый сервер работает на PHP и обработал файл на основе расширения.
Вывод только результата обработки файла на удалённом сервере лучше получить
вызовом функции readfile,
а при включении PHP-кода из файла на удалённом сервере потребуется соблюдать
повышенную осторожность и проверять, чтобы удалённый сервер создал корректный и безопасный код.
Раздел «Удалённые файлы» и описания
функций fopen и file дают дополнительную
информацию.
Обработка значений, которые возвращает выражение включения: при ошибке выражение
include возвращает значение FALSE и выдаёт предупреждение.
Успешные включения возвращают значение 1, если только значение возврата
не переопределили включаемым файлом. Допускается выполнять инструкцию return
внутри включаемого файла, чтобы завершить процесс выполнения
во включаемом файле и вернуться к выполнению родительского файла. Из включаемых файлов
также доступен возврат значения. Значение вызова включения получают так же, как
если бы вызвали функцию. Невозможно получить значение вызова включения
удалённого файла, если только вывод удалённого файла не содержит
корректные теги начала и конца PHP-кода,
как и с локальными файлами. Переменные, которые объявили внутри PHP-тегов,
включатся в текущий скрипт в месте включения файла.
Поскольку выражение include относится к языковым конструкциям,
круглые скобки вокруг аргумента необязательны. При сравнении
значения, которое возвращает выражение включения файла, соблюдают осторожность.
Сравнение значения, которое возвращает выражение include
]]>
Пример работы выражения include с инструкцией return
noreturn.php
testreturns.php
]]>
Значение переменной $bar равно 1, поскольку
инструкция успешно включила файл. Обратите внимание на разницу между приведёнными примерами.
В первом записали return внутри включаемого файла, тогда как во втором — нет.
Выражение включения возвращает значение &false; и возникает ошибка уровня E_WARNING,
если файл невозможно включить.
Главный файл получит доступ к вызову функций, которые определили во включаемом файле,
независимо от того, объявили функции до инструкции return во включаемом файле или после.
PHP выдаст фатальную ошибку при повторном включении файла с определениями функций,
поскольку функции получили определение при первом включении. Лучше включить файл
выражением include_once, а не проверять, включался ли файл прежде.
Другой путь «включить» PHP-файл в переменную — захватить
вывод функциями контроля вывода
вместе с выражением include. Например:
Буферизация вывода и включение PHP-файла в строку
]]>
Обратите внимание на конфигурационные директивы
auto_prepend_file
и auto_append_file
в файле &php.ini;, чтобы включать файлы в скрипты автоматически.
¬e.language-construct;
Дополнительную информацию дают описания функций require,
require_once, include_once,
get_included_files, readfile,
virtual и выражения
include_path.