Start · Sprachen · PHP · Referenz · EventHttpRequest

EventHttpRequest

Klasse

Repräsentiert eine HTTP-Anfrage im Kontext des <code>libevent</code>-basierten HTTP-Servers oder -Clients.

seit PHP 1.5.0 Kategorie: io

Signatur

class EventHttpRequest

Beschreibung

EventHttpRequest ist Bestandteil der Event-PECL-Erweiterung und kapselt eine eingehende oder ausgehende HTTP-Anfrage. Sie wird typischerweise in Callback-Funktionen eines EventHttp-Servers oder beim Versenden von Anfragen über EventHttpConnection verwendet.

Über Objekte dieser Klasse lassen sich alle wesentlichen Bestandteile einer HTTP-Anfrage lesen und schreiben: Methode, URI, Header, Body sowie der zugehörige Antwort-Buffer. Außerdem kann die HTTP-Antwort direkt über EventHttpRequest::sendReply() und verwandte Methoden zurückgesendet werden.

Ein typischer Einsatz besteht darin, im Request-Callback des HTTP-Servers die Anfrage auszuwerten (z. B. Methode und URI prüfen), eine Antwort zusammenzusetzen und diese asynchron an den Client zu senden. Die Klasse integriert sich nahtlos in die Event-Loop von EventBase.

Die Klasse bietet Klassenkonstanten für HTTP-Methoden (EventHttpRequest::CMD_GET, CMD_POST usw.) sowie für übliche HTTP-Statuswerte.

Beispiele

Einfacher asynchroner HTTP-Server mit EventHttpRequest

<?php
$base = new EventBase();
$http = new EventHttp($base);

// Standard-Callback für alle eingehenden Anfragen
$http->setDefaultCallback(function (EventHttpRequest $req) {
    $method = $req->getCommand(); // z. B. EventHttpRequest::CMD_GET
    $uri    = $req->getUri();

    // Ausgehenden Buffer befüllen
    $buf = $req->getOutputBuffer();
    $buf->add("<html><body>Hallo! URI: " . htmlspecialchars($uri) . "</body></html>");

    // HTTP-Antwort senden
    $req->sendReply(200, "OK");
});

$http->bind("0.0.0.0", 8080);
echo "HTTP-Server läuft auf Port 8080 ...\n";
$base->loop();
HTTP-Server läuft auf Port 8080 ...

HTTP-Methode prüfen und Header auslesen

<?php
$base = new EventBase();
$http = new EventHttp($base);

$http->setDefaultCallback(function (EventHttpRequest $req) {
    // Nur GET-Anfragen erlauben
    if ($req->getCommand() !== EventHttpRequest::CMD_GET) {
        $req->sendError(405, "Method Not Allowed");
        return;
    }

    // Request-Header auslesen
    $headers     = $req->getInputHeaders();
    $userAgent   = $headers['User-Agent'] ?? 'unbekannt';

    $buf = $req->getOutputBuffer();
    $buf->add("User-Agent: " . htmlspecialchars($userAgent));

    $req->sendReply(200, "OK");
});

$http->bind("127.0.0.1", 8081);
$base->loop();

// Wichtig · Fallstricke

Sicherheit: Alle vom Client gesendeten Daten (URI, Header, Body) sind als nicht vertrauenswürdig zu behandeln. Vor der Ausgabe oder Weiterverarbeitung müssen Werte wie die URI stets mit htmlspecialchars() oder äquivalenten Mitteln bereinigt werden, um XSS zu verhindern.

Verfügbarkeit: EventHttpRequest setzt die PECL-Erweiterung event (>= 1.5.0) sowie die C-Bibliothek libevent2 voraus. Sie ist nicht Teil der PHP-Standardinstallation.

Lebensdauer: Das EventHttpRequest-Objekt darf innerhalb des Callbacks nicht über EventHttpRequest::sendReply() oder EventHttpRequest::cancel() hinaus referenziert werden, da libevent den zugrunde liegenden Speicher danach freigibt.