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.