1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
archived-doc-ru/reference/stream/functions/stream-socket-client.xml
2024-06-11 12:54:53 +03:00

282 lines
12 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: 181e9c5572ed04ed712b8d7f858f61a94647c6ac Maintainer: mch Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.stream-socket-client" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>stream_socket_client</refname>
<refpurpose>Открывает соединение с интернет-сокетом или с доменным Unix-сокетом</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>resource</type><type>false</type></type><methodname>stream_socket_client</methodname>
<methodparam><type>string</type><parameter>address</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter role="reference">error_code</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter role="reference">error_message</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type class="union"><type>float</type><type>null</type></type><parameter>timeout</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer><constant>STREAM_CLIENT_CONNECT</constant></initializer></methodparam>
<methodparam choice="opt"><type class="union"><type>resource</type><type>null</type></type><parameter>context</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
Функция начинает соединение потока или датаграммы с удалённым сокетом, который указали
в параметре <parameter>address</parameter>. Тип создаваемого сокета
определяется по транспорту, который указали через стандартное форматирование URL-адреса:
<literal>transport://target</literal>. Для сокетов интернет-домена
(AF_INET) наподобие TCP и UDP часть <literal>target</literal>
параметра <parameter>address</parameter> должна состоять из
имени хоста или IP-адреса, за которым следует двоеточие и номер порта. Для доменных
сокетов Unix часть <literal>target</literal> должна указывать на
файл сокета в файловой системе.
</para>
<note>
<para>
По умолчанию поток будет открыт в блокирующем режиме. Можно
переключить поток в неблокирующий режим функцией
<function>stream_set_blocking</function>.
</para>
</note>
</refsect1>
<refsect1 role="parameters"><!-- {{{ -->
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>address</parameter></term>
<listitem>
<para>
Адрес удалённого сокета для соединения.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>error_code</parameter></term>
<listitem>
<para>
При сбое соединения функция присвоит параметру номер системной ошибки.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>error_message</parameter></term>
<listitem>
<para>
При сбое соединения функция присвоит параметру сообщение о системной ошибке.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>timeout</parameter></term>
<listitem>
<para>
Число секунд, в течение которых должно произойти время ожидания системного
вызова <literal>connect()</literal>. По умолчанию используется значение директивы
<link linkend="ini.default-socket-timeout">default_socket_timeout</link>.
<note>
<simpara>
Этот параметр применяется, только если попытки асинхронного подключения не предпринимаются.
</simpara>
</note>
<note>
<para>
Чтобы указать время ожидания для чтения или записи данных через сокет, вызывают функцию
<function>stream_set_timeout</function>, поскольку параметр
<parameter>timeout</parameter> применяется только при создании соединения через
сокет.
</para>
</note>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
Поле битовой маски, которое может принимать значение любой комбинации флагов соединения.
Пока набор флагов соединения ограничен следующими значениями:
<constant>STREAM_CLIENT_CONNECT</constant> (по умолчанию),
<constant>STREAM_CLIENT_ASYNC_CONNECT</constant>
и <constant>STREAM_CLIENT_PERSISTENT</constant>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>context</parameter></term>
<listitem>
<para>
Допустимый ресурс контекста, который создали функцией <function>stream_context_create</function>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1><!-- }}} -->
<refsect1 role="returnvalues"><!-- {{{ -->
&reftitle.returnvalues;
<para>
В случае успешного выполнения функция возвращает ресурс потока, который можно
использовать с другими файловыми функциями (например,
<function>fgets</function>, <function>fgetss</function>,
<function>fwrite</function>, <function>fclose</function>
и <function>feof</function>); если возникла ошибка, функция возвращает &false;.
</para>
</refsect1><!-- }}} -->
<refsect1 role="errors"><!-- {{{ -->
&reftitle.errors;
<para>
В случае неудачного вызова функция заполнит параметры <parameter>error_code</parameter>
и <parameter>error_message</parameter> системной ошибкой,
которая произошла при системном вызове
<literal>connect()</literal>. Если значение, которое вернулось в параметре
<parameter>error_code</parameter>, равно <literal>0</literal> и функция
вернула значение &false;, это означает, что ошибка
произошла до вызова <literal>connect()</literal>. Это произошло,
вероятно, из-за проблемы инициализации сокета. Примите во внимание,
что параметры <parameter>error_code</parameter>
и <parameter>error_message</parameter> каждый раз будут передаваться по ссылке.
</para>
</refsect1><!-- }}} -->
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.0.0</entry>
<entry>
Параметры <parameter>timeout</parameter> и <parameter>context</parameter> теперь принимают значение null.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples"><!-- {{{ -->
&reftitle.examples;
<para>
<example xml:id="stream-socket-client.example.basic"><!-- {{{ -->
<title>Пример использования функции <function>stream_socket_client</function></title>
<programlisting role="php">
<![CDATA[
<?php
$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
while (!feof($fp)) {
echo fgets($fp, 1024);
}
fclose($fp);
}
?>
]]>
</programlisting>
</example><!-- }}} -->
<example xml:id="stream-socket-client.example.daytime"><!-- {{{ -->
<title>Пример UDP-соединения</title>
<para>
Получения дня и времени от UDP-службы daytime (порт 13)
на localhost.
</para>
<programlisting role="php">
<![CDATA[
<?php
$fp = stream_socket_client("udp://127.0.0.1:13", $errno, $errstr);
if (!$fp) {
echo "ОШИБКА: $errno - $errstr<br />\n";
} else {
fwrite($fp, "\n");
echo fread($fp, 26);
fclose($fp);
}
?>
]]>
</programlisting>
</example><!-- }}} -->
</para>
</refsect1><!-- }}} -->
<refsect1 role="notes"><!-- {{{ -->
&reftitle.notes;
<warning>
<simpara>
UDP-сокеты иногда открываются без ошибки,
даже если удалённый хост недоступен. Ошибка станет заметной,
только когда данные будут читать из сокета или писать данные в сокет.
Причина этого в том, что UDP — протокол без соединения,
что означает, что операционная система не пытается установить
соединение с сокетом, пока ей в действительности
не нужно отправить или получить данные.
</simpara>
</warning>
&ipv6.brackets;
<note>
<para>
В зависимости от окружения Unix-домены или произвольное
время ожидания соединения могут быть недоступны. Список доступных
транспортов можно получить функцией <function>stream_get_transports</function>.
Смотрите список встроенных транспортов на странице <xref linkend="transports"/>.
</para>
</note>
</refsect1><!-- }}} -->
<refsect1 role="seealso"><!-- {{{ -->
&reftitle.seealso;
<para>
<simplelist>
<member><function>stream_socket_server</function></member>
<member><function>stream_set_blocking</function></member>
<member><function>stream_set_timeout</function></member>
<member><function>stream_select</function></member>
<member><function>fgets</function></member>
<member><function>fgetss</function></member>
<member><function>fwrite</function></member>
<member><function>fclose</function></member>
<member><function>feof</function></member>
<member><xref linkend="ref.curl"/></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
-->