Выражение includeвключает и оценивает указанный файл.

Приведенная ниже документация также применима к require .

Файлы включаются на основе заданного пути к файлу или, если он не указан, указанного include_path . Если файл не найден в include_path , перед сбоем он, includeнаконец, проверит собственный каталог вызывающего скрипта и текущий рабочий каталог. Конструкция includeвыдаст сообщение, E_WARNINGесли не сможет найти файл; это поведение отличается от поведения require , которое выдает E_ERROR.

Обратите внимание, что оба includeи require поднимают дополнительные E_WARNINGs, если к файлу нет доступа, прежде чем поднимать окончательный E_WARNINGили E_ERRORсоответственно.

Если путь определен — будь то абсолютный (начиная с буквы диска или \в Windows, или /в системах Unix/Linux) или относительный к текущему каталогу (начинающийся с .или ..) — include_path будет полностью проигнорирован. Например, если имя файла начинается с ../, синтаксический анализатор будет искать запрошенный файл в родительском каталоге.

Для получения дополнительной информации о том, как PHP обрабатывает включение файлов и включаемый путь, см. документацию для include_path .

Когда файл включен, код, который он содержит, наследует переменную области действия строки, в которой происходит включение. Любые переменные, доступные в этой строке в вызывающем файле, будут доступны в вызываемом файле с этого момента. Однако все функции и классы, определенные во включенном файле, имеют глобальную область действия.

 

Пример #1 Базовый includeпример

vars.php
 

<?php

$color = 'green';
$fruit = 'apple';

?>

test.php
<?php

echo "A $color $fruit"; // A

include 'vars.php';

echo "A $color $fruit"; // A green apple

?>

Если включение происходит внутри функции вызывающего файла, то весь код, содержащийся в вызываемом файле, будет вести себя так, как если бы он был определен внутри этой функции. Таким образом, он будет следовать переменной области действия этой функции. Исключением из этого правила являются магические константы , которые анализатор оценивает до включения.

 

Пример #2 Включение внутри функций

<?php

function foo()
{
    global $color;

    include 'vars.php';

    echo "A $color $fruit";
}

/* vars.php is in the scope of foo() so     *
* $fruit is NOT available outside of this  *
* scope.  $color is because we declared it *
* as global.                               */

foo();                    // A green apple
echo "A $color $fruit";   // A green

?>

Когда файл включен, синтаксический анализ выходит из режима PHP в режим HTML в начале целевого файла и снова возобновляется в конце. По этой причине любой код внутри целевого файла, который должен выполняться как код PHP, должен быть заключен в допустимые начальный и конечный теги PHP .

Если в PHP включены « URL include wrappers », вы можете указать файл, который нужно включить, используя URL (через HTTP или другую поддерживаемую оболочку — список протоколов см. в разделе Поддерживаемые протоколы и оболочки ) вместо локального имени пути. Если целевой сервер интерпретирует целевой файл как PHP-код, переменные могут быть переданы во включенный файл с использованием строки запроса URL-адреса, используемой с HTTP GET. Строго говоря, это не то же самое, что включить файл и наследовать область переменных родительского файла; сценарий фактически запускается на удаленном сервере, а результат затем включается в локальный сценарий.

 

Пример №3 includeчерез HTTP

<?php

/* This example assumes that www.example.com is configured to parse .php
* files and not .txt files. Also, 'Works' here means that the variables
* $foo and $bar are available within the included file. */

// Won't work; file.txt wasn't handled by www.example.com as PHP
include 'http://www.example.com/file.txt?foo=1&bar=2';

// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the
// local filesystem.
include 'file.php?foo=1&bar=2';

// Works.
include 'http://www.example.com/file.php?foo=1&bar=2';
?>

Предупреждение

Предупреждение безопасности

Удаленный файл может быть обработан на удаленном сервере (в зависимости от расширения файла и того факта, работает ли на удаленном сервере PHP или нет), но он все равно должен создать правильный PHP-скрипт, поскольку он будет обработан на локальном сервере. Если файл с удаленного сервера должен быть обработан там и только выведен, функция readfile() гораздо лучше для использования. В противном случае следует уделить особое внимание защите удаленного сценария для создания действительного и желаемого кода.

Обработка возвратов: includeвозвращает FALSEв случае сбоя и выдает предупреждение. Успешное включение, если оно не переопределено включенным файлом, возвращает 1. Можно выполнить оператор возврата внутри включенного файла, чтобы завершить обработку в этом файле и вернуться к сценарию, который его вызвал. Кроме того, можно возвращать значения из включенных файлов. Вы можете взять значение вызова включения, как и для обычной функции. Однако это невозможно при включении удаленных файлов, если вывод удаленного файла не имеет допустимых начального и конечного тегов PHP (как и для любого локального файла). Вы можете объявить необходимые переменные в этих тегах, и они будут введены в любой момент, когда файл был включен.

Поскольку includeэто специальная языковая конструкция, круглые скобки вокруг ее аргумента не нужны. Будьте осторожны при сравнении возвращаемого значения.

Пример #4 Сравнение возвращаемого значения include

<?php
// won't work, evaluated as include(('vars.php') == TRUE), i.e. include('1')
if (include('vars.php') == TRUE) {
    echo 'OK';
}

// works
if ((include 'vars.php') == TRUE) {
    echo 'OK';
}
?>

 

Пример №5 includeи оператор return

return.php
 

<?php

$var = 'PHP';

return $var;

?>

noreturn.php
<?php

$var = 'PHP';

?>

testreturns.php
<?php

$foo = include 'return.php';

echo $foo; // prints 'PHP'

$bar = include 'noreturn.php';

echo $bar; // prints 1

?>

$barэто значение, 1потому что включение было успешным. Обратите внимание на разницу между приведенными выше примерами. Первый использует возврат внутри включенного файла, а другой — нет. Если файл не может быть включен, falseвозвращается и E_WARNINGвыдается.

Если во включенном файле определены функции, их можно использовать в основном файле независимо от того, находятся ли они до возврата или после. Если файл будет включен дважды, PHP выдаст фатальную ошибку, поскольку функции уже были объявлены. Рекомендуется использовать include_once вместо того, чтобы проверять, был ли файл уже включен, и условно возвращаться внутри включенного файла.

Другой способ «включить» PHP-файл в переменную — захватить вывод с помощью функций управления выводом с расширением include. Например:

Пример #6 Использование буферизации вывода для включения PHP-файла в строку

<?php
$string = get_include_contents('somefile.php');

function get_include_contents($filename) {
    if (is_file($filename)) {
        ob_start();
        include $filename;
        return ob_get_clean();
    }
    return false;
}

?>

Чтобы автоматически включать файлы в сценарии, см. также параметры конфигурации auto_prepend_file и auto_append_file в php.ini .