1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-23 23:32:16 +01:00
Files
archived-doc-ru/reference/outcontrol/flushing-system-buffers.xml

161 lines
7.6 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: 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>&#60;?php ?&#62;</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
-->