Files
php-doc-ru/language/wrappers/php.xml
Alexander Moskaliov 17878ffe86 Updated translation
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@318993 c90b9560-bf6c-de11-be94-00142212c4b1
2011-11-10 13:11:11 +00:00

425 lines
19 KiB
XML
Raw 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: 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=&lt;поток для фильтрации&gt;</literal>
</entry>
<entry>
Этот параметр является необходимым. Он указывает потоку, что его
необходимо отфильтровать.
</entry>
</row>
<row>
<entry>
<literal>read=&lt;список фильтров для применения к цепочке чтения&gt;</literal>
</entry>
<entry>
Этот параметр является необязательным. Одно или более имен фильтров может быть указано
здесь, разделенные вертикальной чертой (<literal>|</literal>).
</entry>
</row>
<row>
<entry>
<literal>write=&lt;список фильтров для применения к цепочке записи&gt;</literal>
</entry>
<entry>
Этот параметр является необязательным. Одно или более имен фильтров может быть указано
здесь, разделенные вертикальной чертой (<literal>|</literal>).
</entry>
</row>
<row>
<entry>
<literal>&lt;список фильтров для применения к обеим цепочкам чтения и записи&gt;</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=&lt;поток для фильтрации&gt;</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=&lt;список фильтров для применения к цепочке чтения&gt;</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=&lt;список фильтров для применения к цепочке записи&gt;</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
-->