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/event/eventhttp/construct.xml
2026-01-15 22:52:02 +00:00

250 lines
6.8 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: a47dff201e3f65c07f6c84a535951632771cf72d Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="eventhttp.construct">
<refnamediv>
<refname>EventHttp::__construct</refname>
<refpurpose>Создаёт объект EventHttp (HTTP-сервер)</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier>
<methodname>EventHttp::__construct</methodname>
<methodparam>
<type>EventBase</type>
<parameter>base</parameter>
</methodparam>
<methodparam choice="opt">
<type>EventSslContext</type>
<parameter>ctx</parameter>
<initializer>&null;</initializer>
</methodparam>
</methodsynopsis>
<para>
Создаёт объект HTTP-сервера.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term>
<parameter>base</parameter>
</term>
<listitem>
<para>
Связанная база событий.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<parameter>ctx</parameter>
</term>
<listitem>
<para>
Объект класса <classname>EventSslContext</classname>.
Превращает простой HTTP-сервер в HTTPS-сервер. То есть,
если параметр <parameter>ctx</parameter> настроен правильно,
то основные события буфера будут основаны на сокетах OpenSSL.
Поэтому весь трафик будет проходить через SSL или TLS.
</para>
<note>
<para>
Этот параметр доступен, только если <literal>Event</literal>
скомпилирован с поддержкой OpenSSL и только
с модулем <literal>Libevent 2.1.0-alpha</literal> и выше.
</para>
</note>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>PECL event 1.9.0</entry>
<entry>
Добавлена поддержка OpenSSL (<parameter>ctx</parameter>).
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Простой HTTP-сервер</title>
<programlisting role="php">
<![CDATA[
<?php
/*
* Простой HTTP-сервер.
*
* Чтобы проверить:
* 1) Запустите его на выбранном порту, например:
* $ php examples/http.php 8010
* 2) В другом терминале подключитесь к какому-либо адресу на этом порту
* и сделайте запрос GET или POST (другие здесь отключены), например:
* $ nc -t 127.0.0.1 8010
* POST /about HTTP/1.0
* Content-Type: text/plain
* Content-Length: 4
* Connection: close
* (press Enter)
*
* Будет выведено:
* a=12
* HTTP/1.0 200 OK
* Content-Type: text/html; charset=ISO-8859-1
* Connection: close
*
* $ nc -t 127.0.0.1 8010
* GET /dump HTTP/1.0
* Content-Type: text/plain
* Content-Encoding: UTF-8
* Connection: close
* (press Enter)
*
* Будет выведено:
* HTTP/1.0 200 OK
* Content-Type: text/html; charset=ISO-8859-1
* Connection: close
* (press Enter)
*
* $ nc -t 127.0.0.1 8010
* GET /unknown HTTP/1.0
* Connection: close
*
* Будет выведено:
* HTTP/1.0 200 OK
* Content-Type: text/html; charset=ISO-8859-1
* Connection: close
*
* 3) Посмотрите, что сервер выводит в предыдущем окне терминала.
*/
function _http_dump($req, $data) {
static $counter = 0;
static $max_requests = 2;
if (++$counter >= $max_requests) {
echo "Счётчик достиг максимальных запросов $max_requests. Выходим\n";
exit();
}
echo __METHOD__, " called\n";
echo "запрос:"; var_dump($req);
echo "данные:"; var_dump($data);
echo "\n===== DUMP =====\n";
echo "Команда:", $req->getCommand(), PHP_EOL;
echo "URI:", $req->getUri(), PHP_EOL;
echo "Заголовки ввода:"; var_dump($req->getInputHeaders());
echo "Выходные заголовки:"; var_dump($req->getOutputHeaders());
echo "\n >> Отправка ответа ...";
$req->sendReply(200, "OK");
echo "OK\n";
echo "\n >> Чтение входного буфера ...\n";
$buf = $req->getInputBuffer();
while ($s = $buf->readLine(EventBuffer::EOL_ANY)) {
echo $s, PHP_EOL;
}
echo "Нет больше данных в буфере\n";
}
function _http_about($req) {
echo __METHOD__, PHP_EOL;
echo "URI: ", $req->getUri(), PHP_EOL;
echo "\n >> Отправка ответа ...";
$req->sendReply(200, "OK");
echo "OK\n";
}
function _http_default($req, $data) {
echo __METHOD__, PHP_EOL;
echo "URI: ", $req->getUri(), PHP_EOL;
echo "\n >> Отправка ответа ...";
$req->sendReply(200, "OK");
echo "OK\n";
}
$port = 8010;
if ($argc > 1) {
$port = (int) $argv[1];
}
if ($port <= 0 || $port > 65535) {
exit("Неверный порт");
}
$base = new EventBase();
$http = new EventHttp($base);
$http->setAllowedMethods(EventHttpRequest::CMD_GET | EventHttpRequest::CMD_POST);
$http->setCallback("/dump", "_http_dump", array(4, 8));
$http->setCallback("/about", "_http_about");
$http->setDefaultCallback("_http_default", "пользовательские данные");
$http->bind("0.0.0.0", 8010);
$base->loop();
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
a=12
HTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Connection: close
HTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Connection: close
(press Enter)
HTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Connection: close
]]>
</screen>
</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
-->