PHP
事件 | Event

EventHttp::__construct

EventHttp::__construct

(PECL event >= 1.2.6-beta)

EventHttp :: __ construct - 构造EventHttp对象(HTTP服务器)

描述

public EventHttp::__construct ( EventBase $base [, EventSslContext $ctx = NULL ] )

构造HTTP服务器对象。

参数

base

相关的事件库。

ctx

EventSslContext类对象。将纯HTTP服务器转换为HTTPS服务器。这意味着如果ctx配置正确,则基础缓冲区事件将基于OpenSSL套接字。因此,所有流量都将通过SSL或TLS。

注意:只有在使用OpenSSL支持编译Event并且仅使用Libevent 2.1.0-alpha及更高版本时,此参数才可用。

返回值

返回EventHttp对象。

更新日志

版本描述
1.9.0增加了OpenSSL支持(ctx)。

示例#1简单的HTTP服务器

<?php /*  * Simple HTTP server.  *  * To test it:  * 1) Run it on a port of your choice, e.g.:  * $ php examples/http.php 8010  * 2) In another terminal connect to some address on this port  * and make GET or POST request(others are turned off here), e.g.:  * $ nc -t 127.0.0.1 8010  * POST /about HTTP/1.0  * Content-Type: text/plain  * Content-Length: 4  * Connection: close  * (press Enter)  *  * It will output  * 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)  *  * It will output:  * 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  *  * It will output:  * HTTP/1.0 200 OK  * Content-Type: text/html; charset=ISO-8859-1  * Connection: close  *  * 3) See what the server outputs on the previous terminal window.  */ function _http_dump($req, $data) {     static $counter      = 0;     static $max_requests = 2;     if (++$counter >= $max_requests)  {         echo "Counter reached max requests $max_requests. Exiting\n";         exit(     }     echo __METHOD__, " called\n";     echo "request:"; var_dump($req     echo "data:"; var_dump($data     echo "\n===== DUMP =====\n";     echo "Command:", $req->getCommand(), PHP_EOL;     echo "URI:", $req->getUri(), PHP_EOL;     echo "Input headers:"; var_dump($req->getInputHeaders()     echo "Output headers:"; var_dump($req->getOutputHeaders()     echo "\n >> Sending reply ...";     $req->sendReply(200, "OK"     echo "OK\n";     echo "\n >> Reading input buffer ...\n";     $buf = $req->getInputBuffer(     while ($s = $buf->readLine(EventBuffer::EOL_ANY)) {         echo $s, PHP_EOL;     }     echo "No more data in the buffer\n"; } function _http_about($req) {     echo __METHOD__, PHP_EOL;     echo "URI: ", $req->getUri(), PHP_EOL;     echo "\n >> Sending reply ...";     $req->sendReply(200, "OK"     echo "OK\n"; } function _http_default($req, $data) {     echo __METHOD__, PHP_EOL;     echo "URI: ", $req->getUri(), PHP_EOL;     echo "\n >> Sending reply ...";     $req->sendReply(200, "OK"     echo "OK\n"; } $port = 8010; if ($argc > 1) {     $port = (int) $argv[1]; } if ($port <= 0 || $port > 65535) {     exit("Invalid port" } $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", "custom data value" $http->bind("0.0.0.0", 8010 $base->loop( ?>

上面的例子会输出:

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

← EventHttp::bind

EventHttp::removeServerAlias →