(PECL event >= 1.4.0-beta)
Sets a callback for specified URI
public void EventHttp::setCallback ( string $path , string $cb [, string $arg ] )
Sets a callback for specified URI.
Parameters:
path
The path for which to invoke the callback.
cb
The callback callable that gets invoked on requested path
. It should match the following prototype:
arg
Custom data.
Returns:
Returns TRUE
on success. Otherwise FALSE
.
Examples:
EventHttp::setCallback() example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | <?php /* * Simple HTTP server. * * To test it: * 1) Run it on a port of your choice, e.g.: * $ php examples/http.php 8010 * 2) In another terminal connect to some address on this port * and make GET or POST request(others are turned off here), e.g.: * $ nc -t 127.0.0.1 8010 * POST /about HTTP/1.0 * Content-Type: text/plain * Content-Length: 4 * Connection: close * (press Enter) * * It will output * a=12 * HTTP/1.0 200 OK * Content-Type: text/html; charset=ISO-8859-1 * Connection: close * * 3) See what the server outputs on the previous terminal window. */ function _http_dump( $req , $data ) { static $counter = 0; static $max_requests = 2; if (++ $counter >= $max_requests ) { echo "Counter reached max requests $max_requests. Exiting\n" ; exit (); } echo __METHOD__ , " called\n" ; echo "request:" ; var_dump( $req ); echo "data:" ; var_dump( $data ); echo "\n===== DUMP =====\n" ; echo "Command:" , $req ->getCommand(), PHP_EOL; echo "URI:" , $req ->getUri(), PHP_EOL; echo "Input headers:" ; var_dump( $req ->getInputHeaders()); echo "Output headers:" ; var_dump( $req ->getOutputHeaders()); echo "\n >> Sending reply ..." ; $req ->sendReply(200, "OK" ); echo "OK\n" ; echo "\n >> Reading input buffer ...\n" ; $buf = $req ->getInputBuffer(); while ( $s = $buf ->readLine(EventBuffer::EOL_ANY)) { echo $s , PHP_EOL; } echo "No more data in the buffer\n" ; } function _http_about( $req ) { echo __METHOD__ , PHP_EOL; echo "URI: " , $req ->getUri(), PHP_EOL; echo "\n >> Sending reply ..." ; $req ->sendReply(200, "OK" ); echo "OK\n" ; } function _http_default( $req , $data ) { echo __METHOD__ , PHP_EOL; echo "URI: " , $req ->getUri(), PHP_EOL; echo "\n >> Sending reply ..." ; $req ->sendReply(200, "OK" ); echo "OK\n" ; } $port = 8010; if ( $argc > 1) { $port = (int) $argv [1]; } if ( $port <= 0 || $port > 65535) { exit ( "Invalid port" ); } $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" , "custom data value" ); $http ->bind( "0.0.0.0" , 8010); $base ->loop(); ?> |
The above example will output something similar to:
a=12 HTTP/1.0 200 OK Content-Type: text/html; charset=ISO-8859-1 Connection: close
See also:
Please login to continue.