EventHttp::setCallback

(PECL event >= 1.4.0-beta)

EventHttp::setCallback — DĂ©finit une fonction de rappel pour une URI spĂ©cifique

Description

public function EventHttp::setCallback( string $path , string $cb , string $arg = ?): void

Définit une fonction de rappel pour une URI spécifique.

Liste de paramĂštres

path

L'URI pour laquelle la fonction de rappel doit ĂȘtre invoquĂ©e.

cb

La fonction de rappel callable qui sera invoquée lors d'une demande sur l'URI path. Elle doit correspondre au prototype suivant :

function callback( EventHttpRequest $req = NULL , mixed $arg = NULL ): void
req

Un objet EventHttpRequest.

arg

Données personnalisées.

arg

Données personnalisées.

Valeurs de retour

Cette fonction retourne true en cas de succĂšs ou false si une erreur survient.

Exemples

Exemple #1 Exemple avec EventHttp::setCallback()

<?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 rĂ©alisez 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
 *
 * 3) Voir ce qu'affiche le serveur sur le précédent terminal.
 */

function _http_dump($req, $data) {
    static $counter      = 0;
    static $max_requests = 2;

    if (++$counter >= $max_requests)  {
        echo "Le compteur a atteint le maximum de requĂȘtes $max_requests. Sortie\n";
        exit();
    }

    echo __METHOD__, " appelée\n";
    echo "requĂȘte :"; var_dump($req);
    echo "données :"; var_dump($data);

    echo "\n===== DUMP =====\n";
    echo "Commande :", $req->getCommand(), PHP_EOL;
    echo "URI :", $req->getUri(), PHP_EOL;
    echo "En-tĂȘtes d'entrĂ©e :"; var_dump($req->getInputHeaders());
    echo "En-tĂȘtes de sortie :"; var_dump($req->getOutputHeaders());

    echo "\n >> Envoi de la réponse ...";
    $req->sendReply(200, "OK");
    echo "OK\n";

    echo "\n >> Lecture du buffer d'entrée ...\n";
    $buf = $req->getInputBuffer();
    while ($s = $buf->readLine(EventBuffer::EOL_ANY)) {
        echo $s, PHP_EOL;
    }
    echo "Plus de données dans le buffer\n";
}

function _http_about($req) {
    echo __METHOD__, PHP_EOL;
    echo "URI : ", $req->getUri(), PHP_EOL;
    echo "\n >> Envoi de la réponse ...";
    $req->sendReply(200, "OK");
    echo "OK\n";
}

function _http_default($req, $data) {
    echo __METHOD__, PHP_EOL;
    echo "URI : ", $req->getUri(), PHP_EOL;
    echo "\n >> Envoi de la réponse ...";
    $req->sendReply(200, "OK");
    echo "OK\n";
}

$port = 8010;
if ($argc > 1) {
    $port = (int) $argv[1];
}
if ($port <= 0 || $port > 65535) {
    exit("Port invalide");
}

$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", "valeur de données personnalisée");

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

Résultat de l'exemple ci-dessus est similaire à :

a=12
HTTP/1.0 200 OK
Content-Type: text/html; charset=ISO-8859-1
Connection: close

Voir aussi

  • EventHttp::setDefaultCallback() - DĂ©finit la fonction de rappel par dĂ©faut pour gĂ©rer les requĂȘtes qui ne sont pas attrapĂ©es par des fonctions de rappel spĂ©cifiques
add a note

User Contributed Notes

There are no user contributed notes for this page.