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

# 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

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open