EventHttp::__construct

(PECL event >= 1.2.6-beta)

EventHttp::__constructConstruit un objet EventHttp (le serveur HTTP)

Description

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

Construit l'objet serveur HTTP.

Liste de paramètres

base

Evénement de base associé.

ctx

L'objet de la classe EventSslContext. Transforme un serveur HTTP en un serveur HTTPS. Cela signifie que si le paramètre ctx est configuré correctement, alors le buffer d'événements sous-jacent ser abasé sur des sockets OpenSSL. Aussi, tout le trafic passera via SSL ou TLS.

Note:

Ce paramètre n'est disponible que si Event a été compilé avec le support d'OpenSSL, et seulement à partir de la version Libevent 2.1.0-alpha ou supérieures.

Valeurs de retour

Retourne un objet EventHttp.

Historique

Version Description
1.9.0 Ajout du support d'OpenSSL (ctx).

Exemples

Exemple #1 Serveur HTTP simple

<?php
/*
 * Serveur HTTP simple.
 *
 * Pour le tester :
 * 1) Exécutez-le sur le port de votre choix, i.e. :
 * $ php examples/http.php 8010
 * 2) Dans un autre terminal, connectez-vous sur une adresse de ce port
 * et effectuez une requête GET ou POST (les autres sont désactivées ici),
 * i.e. :
 * $ nc -t 127.0.0.1 8010
 * POST /about HTTP/1.0
 * Content-Type: text/plain
 * Content-Length: 4
 * Connection: close
 * (press Enter)
 *
 * Il devrait afficher :
 * 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)
 *
 * Il devrait afficher :
 * 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
 *
 * Il devrait afficher :
 * HTTP/1.0 200 OK
 * Content-Type: text/html; charset=ISO-8859-1
 * Connection: close
 *
 * 3) Regardez ce que le serveur affiche sur le précédent terminal.
 */

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 
$sPHP_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 <= || $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(48));
$http->setCallback("/about""_http_about");
$http->setDefaultCallback("_http_default""custom data value");

$http->bind("0.0.0.0"8010);
$base->loop();
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

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