mirror of
https://github.com/php/doc-ru.git
synced 2026-03-23 23:32:16 +01:00
161 lines
7.6 KiB
XML
161 lines
7.6 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 7ad99aeafea66a1562f668aa3cb11dcc9d9cb951 Maintainer: sergey Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<chapter xml:id="outcontrol.flushing-system-buffers" xmlns="http://docbook.org/ns/docbook">
|
||
<title>Сброс (отправка) системных буферов</title>
|
||
<para>
|
||
PHP предлагает два взаимосвязанных способа
|
||
сброса (отправки и удаления содержимого) системных буферов:
|
||
один — вызов функции <function>flush</function>,
|
||
другой — включение неявного сброса
|
||
функцией <function>ob_implicit_flush</function>
|
||
или директивой <link linkend="ini.implicit-flush">implicit_flush</link>
|
||
в файле &php.ini;.
|
||
</para>
|
||
|
||
<section>
|
||
<title>Поведение сброса (отправки) вывода</title>
|
||
<para>
|
||
Когда неявный сброс выключен, PHP будет сбрасывать вывод, только
|
||
когда вызвана функция <function>flush</function> или когда скрипт завершил работу.
|
||
</para>
|
||
<para>
|
||
При включённом неявном сбросе PHP попытается сбросить вывод
|
||
после каждого блока кода, который выводит данные.
|
||
Вывод в этом контексте — данные ненулевой длины, которые:
|
||
<itemizedlist xml:id="outputcontrol.what-is-output">
|
||
<listitem>
|
||
<simpara>
|
||
написали за пределами тегов <literal><?php ?></literal>
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
выводятся языковыми конструкциями и функциями, явная цель которых заключается
|
||
в выводе пользовательских переменных или строк, наподобие:
|
||
<function>echo</function>, <function>print</function>,
|
||
<function>printf</function>, <function>var_dump</function>,
|
||
<function>var_export</function>, <function>vprintf</function>
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
выводятся функциями, цель которых состоит в сборе и выводе
|
||
данных или информации о запущенном скрипте или PHP, наподобие:
|
||
<function>debug_print_backtrace</function>, <function>phpcredits</function>,
|
||
<function>phpinfo</function>,
|
||
<methodname>ReflectionExtension::info</methodname>
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
выводит PHP при неперехваченном исключении или необработанной ошибке
|
||
(при условии, что включены директивы
|
||
<link linkend="ini.display-errors">display_errors</link>
|
||
и <link linkend="ini.error-reporting">error_reporting</link>)
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
записывают в поток <literal>php://output</literal>
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
<note>
|
||
<simpara>
|
||
Печать пустых строк или отправка заголовков не рассматривается как вывод
|
||
и не приведёт к операции сброса.
|
||
</simpara>
|
||
</note>
|
||
<warning>
|
||
<simpara>
|
||
Если неявный сброс включён, управляющие символы
|
||
(например, <literal>«\n»</literal>, <literal>«\r»</literal>,
|
||
<literal>«\0»</literal>)
|
||
также вызовут сброс.
|
||
</simpara>
|
||
</warning>
|
||
</section>
|
||
|
||
<section>
|
||
<title>Ограничения</title>
|
||
<para>
|
||
Функции сброса системных буферов не сбрасывают пользовательские буферы вывода.
|
||
Чтобы использовать системный и пользовательский буферы вместе,
|
||
пользовательские буферы вывода сбрасывают
|
||
перед сбросом системных буферов, чтобы PHP вывел данные.
|
||
</para>
|
||
<warning>
|
||
<simpara>
|
||
Не исключён риск того, что вызов функции <function>flush</function> или включённый неявный сброс
|
||
помешает обработчикам пользовательских буферов вывода,
|
||
устанавливающим и отправляющим заголовки в веб-контексте
|
||
(например, функция <function>ob_gzhandler</function>),
|
||
отправив заголовки до того, как их отправят обработчики.
|
||
</simpara>
|
||
</warning>
|
||
<para>
|
||
При работе с функциями управления PHP-буфером учитывают,
|
||
что PHP не умеет переопределять буферизацию,
|
||
реализованную базовыми программными или аппаратными средствами.
|
||
Проверка настроек буферизации веб-серверов, браузеров, консолей
|
||
и работа с ними помогают устранить возникающие проблемы.
|
||
При работе в веб-контексте для совместной согласованной работы
|
||
регулируют настройки буферизации веб-сервера
|
||
или буферизации скрипта,
|
||
тогда как обойти стратегии буферизации веб-браузеров
|
||
можно, настроив буферизацию в PHP-скрипте.
|
||
На консолях, которые реализуют буферизацию строк,
|
||
символы новой строки вставляют в нужные места
|
||
перед сбросом вывода.
|
||
</para>
|
||
</section>
|
||
|
||
<section>
|
||
<title>Различия в сбросе в интерфейсах <acronym>SAPI</acronym></title>
|
||
<para>
|
||
Хотя реализации сброса в каждом интерфейсе <acronym>SAPI</acronym> слегка различаются,
|
||
эти реализации попадают в одну из категорий:
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Интерфейсы <acronym>SAPI</acronym> в веб-контексте вначале сбросят заголовки,
|
||
а затем вывод.
|
||
К таким <acronym>SAPI</acronym> относятся <literal>Apache2Handler</literal>, <literal>CGI</literal>,
|
||
<literal>FastCGI</literal> и <literal>FPM</literal>
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
другие <acronym>SAPI</acronym>, например
|
||
<literal>CLI</literal> и <literal>embed</literal>,
|
||
только сбросят вывод
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
</section>
|
||
|
||
</chapter>
|
||
<!-- 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
|
||
-->
|