Files
php-doc-ru/reference/stream/functions/stream-get-meta-data.xml

327 lines
9.7 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: cf3707c0f4aab3f7d4d9bfef40827375a6007c0b Maintainer: mch Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.stream-get-meta-data" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>stream_get_meta_data</refname>
<refpurpose>Извлекает заголовок или метаданные из потоков или файловых указателей</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>stream_get_meta_data</methodname>
<methodparam><type>resource</type><parameter>stream</parameter></methodparam>
</methodsynopsis>
<para>
Функция возвращает информацию о существующем потоке <parameter>stream</parameter>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>stream</parameter></term>
<listitem>
<para>
Параметр stream может быть любым потоком, который создали функциями <function>fopen</function>,
<function>fsockopen</function>, <function>pfsockopen</function> и <function>stream_socket_client</function>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Функция возвращает массив, который содержит следующие элементы:
</para>
<itemizedlist>
<listitem>
<para>
<literal>timed_out</literal> (bool) — &true;, если поток
превысил время ожидания данных во время последнего вызова функции
<function>fread</function> или <function>fgets</function>.
</para>
</listitem>
<listitem>
<para>
<literal>blocked</literal> (bool) — &true;, если поток находится в
режиме блокирующего ввода-вывода. Смотрите описание функции <function>stream_set_blocking</function>.
</para>
</listitem>
<listitem>
<para>
<literal>eof</literal> (bool) — &true;, если поток достиг
конца файла. Заметьте, что для потоков с типом socket этот член может быть равен &true;,
даже когда элемент <literal>unread_bytes</literal> не равен нулю. Чтобы
определить, есть ли ещё данные для чтения, вместо чтения этого элемента
вызывают функцию <function>feof</function>.
</para>
</listitem>
<listitem>
<para>
<literal>unread_bytes</literal> (int) — количество байтов,
которые содержатся сейчас в собственном внутреннем буфере PHP.
</para>
<note>
<simpara>
Не следует использовать это значение в скрипте.
</simpara>
</note>
</listitem>
<listitem>
<para>
<literal>stream_type</literal> (string) — метка, которая описывает
внутреннюю реализацию потока.
</para>
</listitem>
<listitem>
<para>
<literal>wrapper_type</literal> (string) — метка, которая описывает
реализацию обёртки протокола, наложенного на поток.
Раздел «<xref linkend="wrappers"/>» даёт дополнительную информацию об обёртках.
</para>
</listitem>
<listitem>
<para>
<literal>wrapper_data</literal> (mixed) — специфические для обёртки
данные, прикреплённые к этому потоку. Раздел «<xref linkend="wrappers"/>»
даёт дополнительную информацию об обёртках и их данных.
</para>
</listitem>
<!-- {{{ needs updating when stream filters are included again
<listitem>
<para>
<literal>filters</literal> (array) — массив, содержащий
названия всех фильтров, который были наложены на этот поток.
Документация по фильтрам может быть найдена в
<link linkend="filters">Приложении по фильтрам</link>.
</para>
</listitem>
-->
<listitem>
<para>
<literal>mode</literal> (string) — тип доступа, который требуется
для этого потока (смотрите таблицу 1 в описании функции <link
linkend="function.fopen">fopen()</link>)
</para>
</listitem>
<listitem>
<para>
<literal>seekable</literal> (bool) — можно ли перемещаться по текущему
потоку.
</para>
</listitem>
<listitem>
<para>
<literal>uri</literal> (string) — URI-идентификатор или имя файла, которое связано с этим
потоком.
</para>
</listitem>
<listitem>
<para>
<literal>crypto</literal> (array) — метаданные TLS-соединения потока.
Примечание: массив будет содержать это поле, только если поток ресурса использует TLS.
</para>
</listitem>
</itemizedlist>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>
Пример использования функции <function>stream_get_meta_data</function>
с вызовом функции <function>fopen</function> с HTTP-протоколом
</title>
<programlisting role="php">
<![CDATA[
<?php
$url = 'http://www.example.com/';
if (!$fp = fopen($url, 'r')) {
trigger_error("Невозможно открыть URL-адрес, который содержит переменная $url", E_USER_ERROR);
}
$meta = stream_get_meta_data($fp);
var_dump($meta);
fclose($fp);
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
array(10) {
'timed_out' =>
bool(false)
'blocked' =>
bool(true)
'eof' =>
bool(false)
'wrapper_data' =>
array(13) {
[0] =>
string(15) "HTTP/1.1 200 OK"
[1] =>
string(11) "Age: 244629"
[2] =>
string(29) "Cache-Control: max-age=604800"
[3] =>
string(38) "Content-Type: text/html; charset=UTF-8"
[4] =>
string(35) "Date: Sat, 20 Nov 2021 18:17:57 GMT"
[5] =>
string(24) "Etag: "3147526947+ident""
[6] =>
string(38) "Expires: Sat, 27 Nov 2021 18:17:57 GMT"
[7] =>
string(44) "Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT"
[8] =>
string(22) "Server: ECS (chb/0286)"
[9] =>
string(21) "Vary: Accept-Encoding"
[10] =>
string(12) "X-Cache: HIT"
[11] =>
string(20) "Content-Length: 1256"
[12] =>
string(17) "Connection: close"
}
'wrapper_type' =>
string(4) "http"
'stream_type' =>
string(14) "tcp_socket/ssl"
'mode' =>
string(1) "r"
'unread_bytes' =>
int(1256)
'seekable' =>
bool(false)
'uri' =>
string(23) "http://www.example.com/"
}
]]>
</screen>
</example>
<example>
<title>
Пример использования <function>stream_get_meta_data</function>
с вызовом функции <function>stream_socket_client</function> с HTTPS-протоколом
</title>
<programlisting role="php">
<![CDATA[
<?php
$streamContext = stream_context_create(
[
'ssl' => [
'capture_peer_cert' => true,
'capture_peer_cert_chain' => true,
'disable_compression' => true,
],
]
);
$client = stream_socket_client(
'ssl://www.example.com:443',
$errorNumber,
$errorDescription,
40,
STREAM_CLIENT_CONNECT,
$streamContext
);
$meta = stream_get_meta_data($client);
var_dump($meta);
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
array(8) {
'crypto' =>
array(4) {
'protocol' =>
string(7) "TLSv1.3"
'cipher_name' =>
string(22) "TLS_AES_256_GCM_SHA384"
'cipher_bits' =>
int(256)
'cipher_version' =>
string(7) "TLSv1.3"
}
'timed_out' =>
bool(false)
'blocked' =>
bool(true)
'eof' =>
bool(false)
'stream_type' =>
string(14) "tcp_socket/ssl"
'mode' =>
string(2) "r+"
'unread_bytes' =>
int(0)
'seekable' =>
bool(false)
}
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>Эта функция НЕ будет работать с сокетами, которые создали через <link
linkend="ref.sockets">модуль Socket</link>.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>get_headers</function></member>
<member><link linkend="reserved.variables.httpresponseheader">$http_response_header</link></member>
</simplelist>
</para>
</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
-->