Устанавливает callback-функцию для URI-идентификатора

# EventHttp::setCallback

(PECL event >= 1.4.0-beta)

EventHttp::setCallback — Устанавливает callback-функцию для URI-идентификатора

### Описание

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

Метод устанавливает callback-функцию для заданного URI-идентификатора.

### Список параметров

`path`

  Путь для вызова callback-функции.

`cb`

  Callback-функция callable, которая вызывается по пути `path`. Функция должна соответствовать следующему прототипу:

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

    Объект EventHttpRequest.

  `arg`

    Пользовательские данные.

`arg`

  Пользовательские данные.

### Возвращаемые значения

Функция возвращает `true`, если выполнилась успешно, или `false`, если возникла ошибка.

### Примеры

Пример #1 Пример установки callback-функции методом EventHttp::setCallback()

    <?php

    /*
     * Простой HTTP-сервер.
     *
     * Чтобы проверить:
     * 1) Запустите сервер на выбранном порту, например:
     * $ php examples/http.php 8010
     * 2) В другом терминале подключитесь к какому-либо адресу на этом порту
     * и сделайте GET- или POST-запрос (другие здесь отключены), например:
     * $ nc -t 127.0.0.1 8010
     * POST /about HTTP/1.0
     * Content-Type: text/plain
     * Content-Length: 4
     * Connection: close
     * (press Enter)
     *
     * Выводит:
     * a=12
     * HTTP/1.0 200 OK
     * Content-Type: text/html; charset=ISO-8859-1
     * Connection: close
     *
     * 3) Посмотрите, что сервер выводит в предыдущем окне терминала.
     */

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

        if (++$counter >= $max_requests)  {
            echo "Счётчик достиг максимальных запросов $max_requests. Выходим\n";
            exit();
        }

        echo __METHOD__, " called\n";
        echo "запрос:"; var_dump($req);
        echo "данные:"; var_dump($data);

        echo "\n===== DUMP =====\n";
        echo "команда:", $req->getCommand(), PHP_EOL;
        echo "URI:", $req->getUri(), PHP_EOL;
        echo "Заголовки ввода:"; var_dump($req->getInputHeaders());
        echo "Выходные заголовки:"; var_dump($req->getOutputHeaders());

        echo "\n >> Отправка ответа ...";
        $req->sendReply(200, "OK");
        echo "OK\n";

        echo "\n >> Чтение входного буфера ...\n";
        $buf = $req->getInputBuffer();
        while ($s = $buf->readLine(EventBuffer::EOL_ANY)) {
            echo $s, PHP_EOL;
        }
        echo "Нет больше данных в буфере\n";
    }

    function _http_about($req)
    {
        echo __METHOD__, PHP_EOL;
        echo "URI: ", $req->getUri(), PHP_EOL;
        echo "\n >> Отправка ответа ...";
        $req->sendReply(200, "OK");
        echo "OK\n";
    }

    function _http_default($req, $data)
    {
        echo __METHOD__, PHP_EOL;
        echo "URI: ", $req->getUri(), PHP_EOL;
        echo "\n >> Отправка ответа ...";
        $req->sendReply(200, "OK");
        echo "OK\n";
    }

    $port = 8010;
    if ($argc > 1) {
        $port = (int) $argv[1];
    }

    if ($port <= 0 || $port > 65535) {
        exit("Неверный порт");
    }

    $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", "пользовательские данные");

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

    ?>

Вывод приведённого примера будет похож на:

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

### Смотрите также

- EventHttp::setDefaultCallback() - Устанавливает callback-функцию по умолчанию для обработки запросов, которые не перехватываются конкретными callback-функциями

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