mirror of
https://github.com/php/doc-ru.git
synced 2025-08-20 16:51:35 +00:00
327 lines
9.7 KiB
XML
327 lines
9.7 KiB
XML
<?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
|
||
-->
|