mirror of
https://github.com/php/doc-ru.git
synced 2025-08-20 23:31:15 +00:00

git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@318993 c90b9560-bf6c-de11-be94-00142212c4b1
425 lines
19 KiB
XML
425 lines
19 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: b4210fc43895e667ffd62eef7b8fdc5c3d70413b Maintainer: mch Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<!-- $Revision$ -->
|
||
|
||
<refentry xml:id="wrappers.php" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" role="noversion">
|
||
<refnamediv>
|
||
<refname>php://</refname>
|
||
<refpurpose>Доступ к различным потокам ввода-вывода</refpurpose>
|
||
</refnamediv>
|
||
|
||
<refsect1 role="description">
|
||
&reftitle.description;
|
||
<para>
|
||
PHP предоставляет несколько разнообразных потоков ввода-вывода, которые позволяют
|
||
получить доступ к собственным потокам ввода-вывода PHP,к дескрипторам стандартного ввода, вывода и
|
||
потока ошибок, к временным файловым потокам в памяти и на диске, и фильтрам, которые
|
||
могут манипулировать другими файловыми ресурсами по мере их считывания
|
||
или записи.
|
||
</para>
|
||
|
||
<refsect2>
|
||
<title>php://stdin, php://stdout and php://stderr</title>
|
||
<simpara>
|
||
<filename>php://stdin</filename>, <filename>php://stdout</filename> и
|
||
<filename>php://stderr</filename> позволяют получить прямой доступ к соответствующим
|
||
потокам ввода или вывода процесса PHP. Поток указывает на копию файлового
|
||
дескриптора, таким образом, если вы откроете <filename>php://stdin</filename>
|
||
и потом закроете его, вы закроете только вашу копию дескриптора. Актуальный
|
||
поток, на который ссылается <constant>STDIN</constant> остается неизменным.
|
||
Обратите внимание, что PHP демонстрировал ошибочное поведение в этом отношении
|
||
до версии PHP 5.2.1. Рекомендуется просто использовать константы <constant>STDIN</constant>,
|
||
<constant>STDOUT</constant> и <constant>STDERR</constant> вместо ручного
|
||
открытия потоков, используя эти обертки.
|
||
</simpara>
|
||
<simpara>
|
||
Поток <filename>php://stdin</filename> предназначен только для чтения, тогда как
|
||
<filename>php://stdout</filename> и <filename>php://stderr</filename> предназначены
|
||
только для записи.
|
||
</simpara>
|
||
</refsect2>
|
||
|
||
<refsect2>
|
||
<title>php://input</title>
|
||
<simpara>
|
||
<filename>php://input</filename> является потоком только для чтения, который позволяет вам
|
||
читать необработанные данные из тела запроса. В случае POST-запросов предпочтительней
|
||
использовать <filename>php://input</filename> вместо <varname>$HTTP_RAW_POST_DATA</varname>, так как этот метод не зависит
|
||
от специальных &php.ini; директив. Кроме того, в тех случаях, где
|
||
<varname>$HTTP_RAW_POST_DATA</varname> не заполняется по умолчанию, это потенциально
|
||
менее затратно для памяти, чем активация директивы <link
|
||
linkend="ini.always-populate-raw-post-data">always_populate_raw_post_data</link>.
|
||
<filename>php://input</filename> не доступен с типом содержимого
|
||
<literal>enctype="multipart/form-data"</literal>.
|
||
</simpara>
|
||
<note>
|
||
<simpara>
|
||
Поток, открытый с <filename>php://input</filename> может быть прочтен только
|
||
один раз. Поток не поддерживает операции поиска. Тем не менее, в зависимости от
|
||
реализации SAPI интерфейса, может быть возможно открыть другой поток
|
||
<filename>php://input</filename> и повторить чтение. Это возможно только
|
||
если тело запроса заранее сохраняется. Это типично для случая
|
||
с POST-запросом, но не для других методов запросов, таких как PUT или
|
||
PROPFIND.
|
||
</simpara>
|
||
</note>
|
||
</refsect2>
|
||
|
||
<refsect2>
|
||
<title>php://output</title>
|
||
<para>
|
||
<filename>php://output</filename> является потоком только для записи, который позволяет вам
|
||
записать данные в выходной буфер аналогично как это делают функции
|
||
<function>print</function> и <function>echo</function>.
|
||
</para>
|
||
</refsect2>
|
||
<refsect2>
|
||
<title>php://fd</title>
|
||
<simpara>
|
||
<filename>php://fd</filename> предоставляет прямой доступ к указанному файловому
|
||
дескриптору. Например, <filename>php://fd/3</filename> относится к файловому
|
||
дескриптору 3.
|
||
</simpara>
|
||
</refsect2>
|
||
|
||
<refsect2>
|
||
<title>php://memory и php://temp</title>
|
||
<simpara>
|
||
<filename>php://memory</filename> и <filename>php://temp</filename> являются
|
||
потоками для чтения/записи и позволяют сохранять временные данные в файлоподобной
|
||
обертке. Единственная разница между ними заключается в том, что
|
||
<filename>php://memory</filename> будет всегда хранить данные в оперативной памяти,
|
||
тогда как <filename>php://temp</filename> будет использовать временный файл в том случае, когда
|
||
объем хранимой информации достигнет заданный лимит (по умолчанию составляет 2 Мб).
|
||
Расположение этого временного файла определяется аналогично функции
|
||
<function>sys_get_temp_dir</function>.
|
||
</simpara>
|
||
<simpara>
|
||
Размер лимита для <filename>php://temp</filename> может устанавливаться путем
|
||
добавления <literal>/maxmemory:NN</literal>, где <literal>NN</literal> - это
|
||
максимальный размер данных в байтах для хранения в памяти перед испольхованием временного
|
||
файла.
|
||
</simpara>
|
||
</refsect2>
|
||
|
||
<refsect2>
|
||
<title>php://filter</title>
|
||
<simpara>
|
||
<filename>php://filter</filename> - это вид мета-обертки, предназначенный для
|
||
разрешения применения <link linkend="filters">фильтров</link> к
|
||
потоку во время открытия. Это полезно для функционально полных файловых функций
|
||
таких, как <function>readfile</function>,
|
||
<function>file</function>, и <function>file_get_contents</function> там,
|
||
где иначе не было возможности применить фильтр к потоку до того, как
|
||
содержимое будет прочитано.
|
||
</simpara>
|
||
<para>
|
||
Поток <filename>php://filter</filename> принимает следующие параметры
|
||
как часть своего пути. Пожалуйста, ознакомьтесь с примерами и особенностями при использовании
|
||
этих параметров.
|
||
</para>
|
||
<para>
|
||
<table>
|
||
<title>Параметры для php://filter</title>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>Название</entry>
|
||
<entry>Описание</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>
|
||
<literal>resource=<поток для фильтрации></literal>
|
||
</entry>
|
||
<entry>
|
||
Этот параметр является необходимым. Он указывает потоку, что его
|
||
необходимо отфильтровать.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>
|
||
<literal>read=<список фильтров для применения к цепочке чтения></literal>
|
||
</entry>
|
||
<entry>
|
||
Этот параметр является необязательным. Одно или более имен фильтров может быть указано
|
||
здесь, разделенные вертикальной чертой (<literal>|</literal>).
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>
|
||
<literal>write=<список фильтров для применения к цепочке записи></literal>
|
||
</entry>
|
||
<entry>
|
||
Этот параметр является необязательным. Одно или более имен фильтров может быть указано
|
||
здесь, разделенные вертикальной чертой (<literal>|</literal>).
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>
|
||
<literal><список фильтров для применения к обеим цепочкам чтения и записи></literal>
|
||
</entry>
|
||
<entry>
|
||
Любой список фильтров, которые используются без префиксов <literal>read=</literal>
|
||
или <literal>write=</literal>, будет применен к обоим потокам на чтение и на запись
|
||
при необходимости.
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
</para>
|
||
</refsect2>
|
||
</refsect1>
|
||
|
||
<refsect1 role="options"><!-- {{{ -->
|
||
&reftitle.options;
|
||
<para>
|
||
<table>
|
||
<title>
|
||
Основная информация (для <literal>php://filter</literal> смотрите
|
||
информацию по обертке, которая подвергается фильтрации)
|
||
</title>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>Атрибут</entry>
|
||
<entry>Поддержка</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>Ограничение по <link linkend="ini.allow-url-fopen">allow_url_fopen</link></entry>
|
||
<entry>Нет</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Ограничение по <link linkend="ini.allow-url-include">allow_url_include</link></entry>
|
||
<entry>
|
||
только <literal>php://input</literal>,
|
||
<literal>php://stdin</literal>,
|
||
<literal>php://memory</literal> и
|
||
<literal>php://temp</literal>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Чтение</entry>
|
||
<entry>
|
||
только <literal>php://stdin</literal>,
|
||
<literal>php://input</literal>,
|
||
<literal>php://fd</literal>,
|
||
<literal>php://memory</literal> и
|
||
<literal>php://temp</literal>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Запись</entry>
|
||
<entry>
|
||
только <literal>php://stdout</literal>,
|
||
<literal>php://stderr</literal>,
|
||
<literal>php://output</literal>,
|
||
<literal>php://fd</literal>,
|
||
<literal>php://memory</literal> и
|
||
<literal>php://temp</literal>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Добавление</entry>
|
||
<entry>
|
||
только <literal>php://stdout</literal>,
|
||
<literal>php://stderr</literal>,
|
||
<literal>php://output</literal>,
|
||
<literal>php://fd</literal>,
|
||
<literal>php://memory</literal> и
|
||
<literal>php://temp</literal>. (Эквивалентно записи)
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Одновременное чтение и запись</entry>
|
||
<entry>
|
||
только <literal>php://fd</literal>,
|
||
<literal>php://memory</literal> и
|
||
<literal>php://temp</literal>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Поддержка <function>stat</function></entry>
|
||
<entry>
|
||
только <literal>php://memory</literal> и
|
||
<literal>php://temp</literal>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Поддержка <function>unlink</function></entry>
|
||
<entry>Нет</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Поддержка <function>rename</function></entry>
|
||
<entry>Нет</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Поддержка <function>mkdir</function></entry>
|
||
<entry>Нет</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Поддержка <function>rmdir</function></entry>
|
||
<entry>Нет</entry>
|
||
</row>
|
||
<row>
|
||
<entry>Поддержка <function>stream_select</function></entry>
|
||
<entry>
|
||
только <literal>php://stdin</literal>,
|
||
<literal>php://stdout</literal>,
|
||
<literal>php://stderr</literal>,
|
||
<literal>php://fd</literal> и
|
||
<literal>php://temp</literal>.
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
</para>
|
||
</refsect1> <!-- }}} -->
|
||
|
||
<refsect1 role="changelog"><!-- {{{ -->
|
||
&reftitle.changelog;
|
||
<para>
|
||
<informaltable>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>&Version;</entry>
|
||
<entry>&Description;</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>5.3.6</entry>
|
||
<entry>
|
||
Был добавлен <filename>php://fd</filename>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>5.1.0</entry>
|
||
<entry>
|
||
Были добавлены <filename>php://memory</filename> и <filename>php://temp</filename>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>5.0.0</entry>
|
||
<entry>
|
||
Был добавлен <filename>php://filter</filename>.
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
</para>
|
||
</refsect1><!-- }}} -->
|
||
|
||
<refsect1 role="examples"><!-- {{{ -->
|
||
&reftitle.examples;
|
||
<example><!-- {{{ -->
|
||
<title>php://temp/maxmemory</title>
|
||
<para>
|
||
Этот необязательный параметр позволяет установить лимит памяти до того, как
|
||
<filename>php://temp</filename> начнет использовать временный файл.
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
// Установка предела в 5 MB.
|
||
$fiveMBs = 5 * 1024 * 1024;
|
||
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
|
||
|
||
fputs($fp, "hello\n");
|
||
|
||
// Читаем то, что мы записали.
|
||
rewind($fp);
|
||
echo stream_get_contents($fp);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example><!-- }}} -->
|
||
<example><!-- {{{ -->
|
||
<title>php://filter/resource=<поток для фильтрации></title>
|
||
<para>
|
||
Этот параметр должен быть расположен в
|
||
конце вашей спецификации <filename>php://filter</filename> и
|
||
должен указывать на поток, который вы хотите фильтровать.
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
/* Это просто эквивалентно:
|
||
readfile("http://www.example.com");
|
||
так как на самом деле фильтры не указаны */
|
||
|
||
readfile("php://filter/resource=http://www.example.com");
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example><!-- }}} -->
|
||
<example><!-- {{{ -->
|
||
<title>php://filter/read=<список фильтров для применения к цепочке чтения></title>
|
||
<para>
|
||
Этот параметр принимает один или более
|
||
имен фильтров, разделенных вертикальной чертой <literal>|</literal>.
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
/* Этот скрипт выведет содержимое
|
||
www.example.com полностью в верхнем регистре */
|
||
readfile("php://filter/read=string.toupper/resource=http://www.example.com");
|
||
|
||
/* Этот скрипт делает тоже самое, что вверхний, но
|
||
будет также кодировать алгоритмом ROT13 */
|
||
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com");
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example><!-- }}} -->
|
||
<example><!-- {{{ -->
|
||
<title>php://filter/write=<список фильтров для применения к цепочке записи></title>
|
||
<para>
|
||
Этот параметр принимает один или более
|
||
имен фильтров, разделенных вертикальной чертой <literal>|</literal>.
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
/* Этот скрипт будет фильтровать строку "Hello World"
|
||
через фильтр rot13, затем записывать результат в
|
||
файл example.txt в текущей директории */
|
||
file_put_contents("php://filter/write=string.rot13/resource=example.txt","Hello World");
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example><!-- }}} -->
|
||
</refsect1><!-- }}} -->
|
||
</refentry>
|
||
|
||
<!-- 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
|
||
-->
|
||
|
||
|