1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
Mikhail Alferov fff86f014e Update a124543 to En (#1072)
* Update tokens.xml to en

* Update include.xml to en

* Update server.xml to En + infostyle

* Update include.xml Fix Rev ID

* Update debug-backtrace.xml to en

* Update define.xml to en
2025-06-03 14:49:54 +03:00

339 lines
17 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: a124543dd3f6b1e5567b07420d23899e582514dc Maintainer: mch Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="function.include" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>include</title>
<?phpdoc print-version-for="include"?>
<simpara>
Выражение <literal>include</literal> включает и оценивает код файла как PHP-код.
</simpara>
<simpara>
Документация текущего раздела также относится к выражению <function>require</function>.
</simpara>
<simpara>
Файлы включаются на основе заданного пути к файлу или, если путь не указали,
на основе путей в директиве <link linkend="ini.include-path">include_path</link>.
Перед выдачей ошибки выражение <literal>include</literal> проверит директорию текущего скрипта,
в который включается файл, и текущую рабочую директорию, если PHP не нашёл файл
в списке путей директивы <link linkend="ini.include-path">include_path</link>.
Выражение <literal>include</literal> выдаст ошибку уровня <constant>E_WARNING</constant>,
если не найдёт файл; поведение отличается от выражения <function>require</function>,
которое выдаст фатальную ошибку <constant>E_ERROR</constant>.
</simpara>
<simpara>
Обратите внимание, при недоступности файла для чтения оба выражения выдадут дополнительную ошибку
уровня <constant>E_WARNING</constant> перед выдачей окончательной
ошибки уровня <constant>E_WARNING</constant> выражением <literal>include</literal>
или ошибки уровня <constant>E_ERROR</constant> выражением <literal>require</literal>,
которые возникают, когда PHP не находит файл.
</simpara>
<simpara>
PHP проигнорирует директиву <link linkend="ini.include-path">include_path</link>,
если указали абсолютный путь (который начинается с буквы диска,
или с обратного слеша <literal>\</literal> в Windows и с прямого слеша <literal>/</literal>
в Unix- и Linux-системах) или путь относительно текущей директории (который начинается
с символа <literal>.</literal> или символов <literal>..</literal>).
Например, парсер будет искать запрошенный файл в родительской директории,
если название файла начинается с <literal>../</literal>.
</simpara>
<simpara>
Документация к директиве <link linkend="ini.include-path">include_path</link>
подробнее рассказывает об обработке языком PHP включаемых файлов и путей.
</simpara>
<simpara>
После включения код включаемого файла наследует ту же
<link linkend="language.variables.scope">область видимости переменных</link>,
что и строка, на которой включили файл. Переменные, которые доступны на этой строке
во включающем файле, будут также доступны во включаемом файле.
Однако функции и классы, которые объявили во включаемом файле,
получат глобальную область видимости.
</simpara>
<para>
<example>
<title>Простой пример подключения файла выражением <literal>include</literal></title>
<programlisting role="php">
<![CDATA[
vars.php
<?php
$color = 'зелёное';
$fruit = 'яблоко';
?>
test.php
<?php
echo "Одно $color $fruit"; // Одно
include 'vars.php';
echo "Одно $color $fruit"; // Одно зелёное яблоко
?>
]]>
</programlisting>
</example>
</para>
<simpara>
Внутри функции, в которой включают файл, код включаемого файла ведёт себя так,
как будто его определили внутри функции; код последует области видимости переменных функции,
в которую включается. Исключение к этому правилу — <link
linkend="language.constants.magic">магические константы</link>, которые
выполняются парсером перед включением.
</simpara>
<para>
<example>
<title>Включение внутри функции</title>
<programlisting role="php">
<![CDATA[
<?php
function foo()
{
global $color;
include 'vars.php';
echo "Одно $color $fruit";
}
/**
* Файл vars.php следует области видимости функции foo(),
* поэтому переменная $fruit недоступна за пределами области видимости функции.
* Переменная $color — доступна, поскольку её объявили глобальной
*/
foo(); // Одно зелёное яблоко
echo "Одно $color $fruit"; // Одно зелёное
?>
]]>
</programlisting>
</example>
</para>
<simpara>
После включения файла разбор переходит из режима PHP-кода
в режим HTML-разметки в начале и возобновляется
в конце включаемого файла. Поэтому код внутри включаемого файла,
который требуется выполнить как PHP-код,
оборачивают <link linkend="language.basic-syntax.phpmode">в корректные теги начала и конца PHP-кода</link>.
</simpara>
<simpara>
PHP разрешает вместо локального пути указывать файлы для включения по URL-адресу,
если разрешили <link linkend="ini.allow-url-include">работу URL-обёрток с include-выражениями</link>.
Файлы включают по HTTP-протоколу или через другие обработчики, которые поддерживает язык.
Список протоколов, которые поддерживаются PHP, приводит страница «<xref linkend="wrappers"/>».
Переменные передают в файл, который включается с удалённого сервера, в строке запроса URL-адреса
аналогично передаче аргументов методом GET по протоколу HTTP, если целевой удалённый сервер
интерпретирует целевой файл как PHP-код. Включение файла с удалённого сервера отличается
от включения файла, который наследует родительскую область видимости файла, в который включается;
скрипт выполняется на удалённом сервере, а результат затем включается в локальный скрипт.
</simpara>
<para>
<example>
<title>
Пример включения вывода, который сгенерировал скрипт удалённого сервера,
выражением <literal>include</literal> через HTTP-запрос
</title>
<programlisting role="php">
<![CDATA[
<?php
/**
* В примере предполагается, что адрес www.example.com настроили на обработку
* файлов с расширением .php, но не .txt. Кроме того, «Сработает» здесь означает, что переменные
* $foo и $bar доступны внутри включаемого файла, и значения переменных определили при обработке переменных GET-запроса
*/
// Не сработает; файл file.txt не обрабатывается адресом www.example.com как PHP-код
include 'http://www.example.com/file.txt?foo=1&bar=2';
// Не сработает; включающий скрипт будет искать файл 'file.php?foo=1&bar=2'
// в локальной файловой системе
include 'file.php?foo=1&bar=2';
// Сработает: удалённому скрипту будут доступны переменные $foo и $bar
include 'http://www.example.com/file.php?foo=1&bar=2';
?>
]]>
</programlisting>
</example>
</para>
<warning>
<title>Предупреждение безопасности</title>
<para>
Локальный сервер ожидает, что удалённый сервер создаст и вернёт допустимый PHP-код,
поскольку скрипт обрабатывается на локальном сервере,
даже если удалённый сервер работает на PHP и обработал файл на основе расширения.
Вывод только результата обработки файла на удалённом сервере лучше получить
вызовом функции <function>readfile</function>,
а при включении PHP-кода из файла на удалённом сервере потребуется соблюдать
повышенную осторожность и проверять, чтобы удалённый сервер создал корректный и безопасный код.
</para>
</warning>
<para>
Раздел «<link linkend="features.remote-files">Удалённые файлы</link>» и описания
функций <function>fopen</function> и <function>file</function> дают дополнительную
информацию.
</para>
<simpara>
Обработка значений, которые возвращает выражение включения: при ошибке выражение
<literal>include</literal> возвращает значение <literal>FALSE</literal> и выдаёт предупреждение.
Успешные включения возвращают значение <literal>1</literal>, если только значение возврата
не переопределили включаемым файлом. Допускается выполнять инструкцию <function>return</function>
внутри включаемого файла, чтобы завершить процесс выполнения
во включаемом файле и вернуться к выполнению родительского файла. Из включаемых файлов
также доступен возврат значения. Значение вызова включения получают так же, как
если бы вызвали функцию. Невозможно получить значение вызова включения
удалённого файла, если только вывод удалённого файла не содержит
<link linkend= "language.basic-syntax.phpmode">корректные теги начала и конца PHP-кода</link>,
как и с локальными файлами. Переменные, которые объявили внутри PHP-тегов,
включатся в текущий скрипт в месте включения файла.
</simpara>
<para>
Поскольку выражение <literal>include</literal> относится к языковым конструкциям,
круглые скобки вокруг аргумента необязательны. При сравнении
значения, которое возвращает выражение включения файла, соблюдают осторожность.
<example>
<title>Сравнение значения, которое возвращает выражение include</title>
<programlisting role="php">
<![CDATA[
<?php
// Не сработает, PHP интерпретирует выражение как include(('vars.php') == TRUE), то есть include('1')
if (include('vars.php') == TRUE) {
echo 'OK';
}
// Cработает
if ((include 'vars.php') == TRUE) {
echo 'OK';
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>
Пример работы выражения <literal>include</literal> с инструкцией <function>return</function>
</title>
<programlisting role="php">
<![CDATA[
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$foo = include 'return.php';
echo $foo; // выведет 'PHP'
$bar = include 'noreturn.php';
echo $bar; // выведет 1
?>
]]>
</programlisting>
</example>
</para>
<simpara>
Значение переменной <literal>$bar</literal> равно <literal>1</literal>, поскольку
инструкция успешно включила файл. Обратите внимание на разницу между приведёнными примерами.
В первом записали <function>return</function> внутри включаемого файла, тогда как во втором — нет.
Выражение включения возвращает значение &false; и возникает ошибка уровня <constant>E_WARNING</constant>,
если файл невозможно включить.
</simpara>
<para>
Главный файл получит доступ к вызову функций, которые определили во включаемом файле,
независимо от того, объявили функции до инструкции <function>return</function> во включаемом файле или после.
PHP выдаст фатальную ошибку при повторном включении файла с определениями функций,
поскольку функции получили определение при первом включении. Лучше включить файл
выражением <function>include_once</function>, а не проверять, включался ли файл прежде.
</para>
<simpara>
Другой путь «включить» PHP-файл в переменную — захватить
вывод <link linkend="ref.outcontrol">функциями контроля вывода</link>
вместе с выражением <literal>include</literal>. Например:
</simpara>
<para>
<example>
<title>Буферизация вывода и включение PHP-файла в строку</title>
<programlisting role="php">
<![CDATA[
<?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;
}
?>
]]>
</programlisting>
</example>
</para>
<para>
Обратите внимание на конфигурационные директивы
<link linkend="ini.auto-prepend-file">auto_prepend_file</link>
и <link linkend="ini.auto-append-file">auto_append_file</link>
в файле &php.ini;, чтобы включать файлы в скрипты автоматически.
</para>
&note.language-construct;
<simpara>
Дополнительную информацию дают описания функций <function>require</function>,
<function>require_once</function>, <function>include_once</function>,
<function>get_included_files</function>, <function>readfile</function>,
<function>virtual</function> и выражения
<link linkend="ini.include-path">include_path</link>.
</simpara>
</sect1><!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->