<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Sets a callback for specified URI</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="eventhttp.setallowedmethods.html">EventHttp::setAllowedMethods</a></div> <div class="next" style="text-align: right; float: right;"><a href="eventhttp.setdefaultcallback.html">EventHttp::setDefaultCallback</a></div> <div class="up"><a href="class.eventhttp.html">EventHttp</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><div id="eventhttp.setcallback" class="refentry"> <div class="refnamediv"> <h1 class="refname">EventHttp::setCallback</h1> <p class="verinfo">(PECL event >= 1.4.0-beta)</p><p class="refpurpose"><span class="refname">EventHttp::setCallback</span> — <span class="dc-title">Sets a callback for specified URI</span></p> </div> <div class="refsect1 description" id="refsect1-eventhttp.setcallback-description"> <h3 class="title">Description</h3> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type"><span class="type void">void</span></span> <span class="methodname"><strong>EventHttp::setCallback</strong></span> ( <span class="methodparam"> <span class="type">string</span> <code class="parameter">$path</code> </span> , <span class="methodparam"> <span class="type">string</span> <code class="parameter">$cb</code> </span> [, <span class="methodparam"> <span class="type">string</span> <code class="parameter">$arg</code> </span> ] )</div> <p class="para rdfs-comment"> Sets a callback for specified URI. </p> </div> <div class="refsect1 parameters" id="refsect1-eventhttp.setcallback-parameters"> <h3 class="title">Parameters</h3> <dl> <dt> <span class="term"> <em><code class="parameter">path</code></em> </span> <dd> <p class="para"> The path for which to invoke the callback. </p> </dd> </dt> <dt> <span class="term"> <em><code class="parameter">cb</code></em> </span> <dd> <p class="para"> The callback <span class="type"><a href="language.types.callable.html" class="type callable">callable</a></span> that gets invoked on requested <em><code class="parameter">path</code></em> . It should match the following prototype: </p> <div class="methodsynopsis dc-description"> <span class="type"><span class="type void">void</span></span> <span class="methodname"><strong>callback</strong></span> ([ <span class="methodparam"> <span class="type"><a href="class.eventhttprequest.html" class="type EventHttpRequest">EventHttpRequest</a></span> <code class="parameter">$req</code> <span class="initializer"> = NULL</span> </span> [, <span class="methodparam"> <span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter">$arg</code> <span class="initializer"> = NULL</span> </span> ]] )</div> <p class="para"> <dl> <dt> <span class="term"> <em><code class="parameter">req</code></em> </span> <dd> <p class="para"> <a href="class.eventhttprequest.html" class="classname">EventHttpRequest</a> object. </p> </dd> </dt> <dt> <span class="term"> <em><code class="parameter">arg</code></em> </span> <dd> <p class="para"> Custom data. </p> </dd> </dt> </dl> </p> </dd> </dt> <dt> <span class="term"> <em><code class="parameter">arg</code></em> </span> <dd> <p class="para"> Custom data. </p> </dd> </dt> </dl> </div> <div class="refsect1 returnvalues" id="refsect1-eventhttp.setcallback-returnvalues"> <h3 class="title">Return Values</h3> <p class="para"> Returns <strong><code>TRUE</code></strong> on success. Otherwise <strong><code>FALSE</code></strong>. </p> </div> <div class="refsect1 examples" id="refsect1-eventhttp.setcallback-examples"> <h3 class="title">Examples</h3> <div class="example" id="example-4265"> <p><strong>Example #1 <span class="function"><strong>EventHttp::setCallback()</strong></span> example</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">/*<br /> * Simple HTTP server.<br /> *<br /> * To test it:<br /> * 1) Run it on a port of your choice, e.g.:<br /> * $ php examples/http.php 8010<br /> * 2) In another terminal connect to some address on this port<br /> * and make GET or POST request(others are turned off here), e.g.:<br /> * $ nc -t 127.0.0.1 8010<br /> * POST /about HTTP/1.0<br /> * Content-Type: text/plain<br /> * Content-Length: 4<br /> * Connection: close<br /> * (press Enter)<br /> *<br /> * It will output<br /> * a=12<br /> * HTTP/1.0 200 OK<br /> * Content-Type: text/html; charset=ISO-8859-1<br /> * Connection: close<br /> *<br /> * 3) See what the server outputs on the previous terminal window.<br /> */<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">_http_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$req</span><span style="color: #007700">, </span><span style="color: #0000BB">$data</span><span style="color: #007700">) {<br /> static </span><span style="color: #0000BB">$counter </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br /> static </span><span style="color: #0000BB">$max_requests </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br /> if (++</span><span style="color: #0000BB">$counter </span><span style="color: #007700">>= </span><span style="color: #0000BB">$max_requests</span><span style="color: #007700">) {<br /> echo </span><span style="color: #DD0000">"Counter reached max requests </span><span style="color: #0000BB">$max_requests</span><span style="color: #DD0000">. Exiting\n"</span><span style="color: #007700">;<br /> exit();<br /> }<br /><br /> echo </span><span style="color: #0000BB">__METHOD__</span><span style="color: #007700">, </span><span style="color: #DD0000">" called\n"</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"request:"</span><span style="color: #007700">; </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$req</span><span style="color: #007700">);<br /> echo </span><span style="color: #DD0000">"data:"</span><span style="color: #007700">; </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">);<br /><br /> echo </span><span style="color: #DD0000">"\n===== DUMP =====\n"</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"Command:"</span><span style="color: #007700">, </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">getCommand</span><span style="color: #007700">(), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"URI:"</span><span style="color: #007700">, </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">getUri</span><span style="color: #007700">(), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"Input headers:"</span><span style="color: #007700">; </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">getInputHeaders</span><span style="color: #007700">());<br /> echo </span><span style="color: #DD0000">"Output headers:"</span><span style="color: #007700">; </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">getOutputHeaders</span><span style="color: #007700">());<br /><br /> echo </span><span style="color: #DD0000">"\n >> Sending reply ..."</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">sendReply</span><span style="color: #007700">(</span><span style="color: #0000BB">200</span><span style="color: #007700">, </span><span style="color: #DD0000">"OK"</span><span style="color: #007700">);<br /> echo </span><span style="color: #DD0000">"OK\n"</span><span style="color: #007700">;<br /><br /> echo </span><span style="color: #DD0000">"\n >> Reading input buffer ...\n"</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">$buf </span><span style="color: #007700">= </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">getInputBuffer</span><span style="color: #007700">();<br /> while (</span><span style="color: #0000BB">$s </span><span style="color: #007700">= </span><span style="color: #0000BB">$buf</span><span style="color: #007700">-></span><span style="color: #0000BB">readLine</span><span style="color: #007700">(</span><span style="color: #0000BB">EventBuffer</span><span style="color: #007700">::</span><span style="color: #0000BB">EOL_ANY</span><span style="color: #007700">)) {<br /> echo </span><span style="color: #0000BB">$s</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /> }<br /> echo </span><span style="color: #DD0000">"No more data in the buffer\n"</span><span style="color: #007700">;<br />}<br /><br />function </span><span style="color: #0000BB">_http_about</span><span style="color: #007700">(</span><span style="color: #0000BB">$req</span><span style="color: #007700">) {<br /> echo </span><span style="color: #0000BB">__METHOD__</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"URI: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">getUri</span><span style="color: #007700">(), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"\n >> Sending reply ..."</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">sendReply</span><span style="color: #007700">(</span><span style="color: #0000BB">200</span><span style="color: #007700">, </span><span style="color: #DD0000">"OK"</span><span style="color: #007700">);<br /> echo </span><span style="color: #DD0000">"OK\n"</span><span style="color: #007700">;<br />}<br /><br />function </span><span style="color: #0000BB">_http_default</span><span style="color: #007700">(</span><span style="color: #0000BB">$req</span><span style="color: #007700">, </span><span style="color: #0000BB">$data</span><span style="color: #007700">) {<br /> echo </span><span style="color: #0000BB">__METHOD__</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"URI: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">getUri</span><span style="color: #007700">(), </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"\n >> Sending reply ..."</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">sendReply</span><span style="color: #007700">(</span><span style="color: #0000BB">200</span><span style="color: #007700">, </span><span style="color: #DD0000">"OK"</span><span style="color: #007700">);<br /> echo </span><span style="color: #DD0000">"OK\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$port </span><span style="color: #007700">= </span><span style="color: #0000BB">8010</span><span style="color: #007700">;<br />if (</span><span style="color: #0000BB">$argc </span><span style="color: #007700">> </span><span style="color: #0000BB">1</span><span style="color: #007700">) {<br /> </span><span style="color: #0000BB">$port </span><span style="color: #007700">= (int) </span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br />}<br />if (</span><span style="color: #0000BB">$port </span><span style="color: #007700"><= </span><span style="color: #0000BB">0 </span><span style="color: #007700">|| </span><span style="color: #0000BB">$port </span><span style="color: #007700">> </span><span style="color: #0000BB">65535</span><span style="color: #007700">) {<br /> exit(</span><span style="color: #DD0000">"Invalid port"</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">$base </span><span style="color: #007700">= new </span><span style="color: #0000BB">EventBase</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$http </span><span style="color: #007700">= new </span><span style="color: #0000BB">EventHttp</span><span style="color: #007700">(</span><span style="color: #0000BB">$base</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$http</span><span style="color: #007700">-></span><span style="color: #0000BB">setAllowedMethods</span><span style="color: #007700">(</span><span style="color: #0000BB">EventHttpRequest</span><span style="color: #007700">::</span><span style="color: #0000BB">CMD_GET </span><span style="color: #007700">| </span><span style="color: #0000BB">EventHttpRequest</span><span style="color: #007700">::</span><span style="color: #0000BB">CMD_POST</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$http</span><span style="color: #007700">-></span><span style="color: #0000BB">setCallback</span><span style="color: #007700">(</span><span style="color: #DD0000">"/dump"</span><span style="color: #007700">, </span><span style="color: #DD0000">"_http_dump"</span><span style="color: #007700">, array(</span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">8</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">$http</span><span style="color: #007700">-></span><span style="color: #0000BB">setCallback</span><span style="color: #007700">(</span><span style="color: #DD0000">"/about"</span><span style="color: #007700">, </span><span style="color: #DD0000">"_http_about"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$http</span><span style="color: #007700">-></span><span style="color: #0000BB">setDefaultCallback</span><span style="color: #007700">(</span><span style="color: #DD0000">"_http_default"</span><span style="color: #007700">, </span><span style="color: #DD0000">"custom data value"</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$http</span><span style="color: #007700">-></span><span style="color: #0000BB">bind</span><span style="color: #007700">(</span><span style="color: #DD0000">"0.0.0.0"</span><span style="color: #007700">, </span><span style="color: #0000BB">8010</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$base</span><span style="color: #007700">-></span><span style="color: #0000BB">loop</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>The above example will output something similar to:</p></div> <div class="example-contents screen"> <div class="cdata"><pre> a=12 HTTP/1.0 200 OK Content-Type: text/html; charset=ISO-8859-1 Connection: close </pre></div> </div> </div> </div> <div class="refsect1 seealso" id="refsect1-eventhttp.setcallback-seealso"> <h3 class="title">See Also</h3> <ul class="simplelist"> <li class="member"> <span class="methodname"><a href="eventhttp.setdefaultcallback.html" class="methodname" rel="rdfs-seeAlso">EventHttp::setDefaultCallback()</a> - Sets default callback to handle requests that are not caught by specific callbacks</span> </li> </ul> </div> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="eventhttp.setallowedmethods.html">EventHttp::setAllowedMethods</a></div> <div class="next" style="text-align: right; float: right;"><a href="eventhttp.setdefaultcallback.html">EventHttp::setDefaultCallback</a></div> <div class="up"><a href="class.eventhttp.html">EventHttp</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>