interface to libuv for php (experimental). also supports http-parser.
This extension is experimental, its functions may change their names or move to extension all together so do not rely to much on them you have been warned!
git clone https://github.com/chobie/php-uv.git --recursive
cd php-uv
make -C libuv
# Note: please use `make -C libuv CFLAGS=-fPIC` instead of `make` on 64bit box.
phpize
./configure
make
make install
# add `extension=uv.so` to your php.ini
see examples and tests directory.
<?php
$tcp = uv_tcp_init();
uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0',8888));
uv_listen($tcp,100, function($server){
$client = uv_tcp_init();
uv_accept($server, $client);
var_dump(uv_tcp_getsockname($server));
uv_read_start($client, function($socket, $nread, $buffer){
var_dump($buffer);
uv_close($socket);
});
});
$c = uv_tcp_init();
uv_tcp_connect($c, uv_ip4_addr('0.0.0.0',8888), function($stream, $stat){
if ($stat == 0) {
uv_write($stream,"Hello",function($stream, $stat){
uv_close($stream);
});
}
});
uv_run();
Check out #php-uv on irc.freenode.net.
- Shuhei Tanuma
PHP License
decrement reference
resource $uv_t: uv resource handle.
*void *:
<?php
$tcp = uv_tcp_init();
uv_unref($tcp);
get last error code.
resource $uv_loop: uv loop handle
long $error_code: error code
<?php
$err = uv_last_error();
var_dump($err);
get error code name.
long $error_code: libuv error code
string $erorr_name: error name
<?php
$err = uv_last_error();
var_dump(uv_err_name($err));
get error message.
long $error_code: libuv error code
string $erorr_message: error message
<?php
$err = uv_last_error();
var_dump(uv_strerror($err));
increment reference count
resource $uv_handle: uv resource.
void:
<?php
$tcp = uv_tcp_init();
uv_ref($tcp);
- support uv_loop resource
run event loop
resource $uv_loopg: uv_loop resource
void:
<?php
$loop = uv_default_loop();
$async = uv_async_init($loop, function($async, $status){
var_dump(1);
uv_close($async);
});
uv_async_send($async);
uv_run();
delete specified loop resource.
resource $uv_loop: uv_loop resource
void:
binds a name to a socket.
resource $uv_tcp: uv_tcp resource
resource $uv_sockaddr: uv sockaddr4 resource.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0',9999));
uv_listen($tcp,100, function($server){
$client = uv_tcp_init();
uv_accept($server, $client);
var_dump(uv_tcp_getsockname($server));
uv_read_start($client, function($socket, $nread, $buffer) use ($server){
var_dump($buffer);
uv_close($socket);
uv_close($server);
});
});
binds a name to a socket.
resource $uv_tcp: uv_tcp resource
resource $uv_sockaddr: uv sockaddr6 resource.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_bind6($tcp, uv_ip6_addr('::1',9999));
uv_listen($tcp,100, function($server){
$client = uv_tcp_init();
uv_accept($server, $client);
var_dump(uv_tcp_getsockname($server));
uv_read_start($client, function($socket, $nread, $buffer) use ($server){
var_dump($buffer);
uv_close($socket);
uv_close($server);
});
});
send buffer to speicified uv resource.
resource $handle: uv resources (uv_tcp, uv_udp, uv_pipe ...etc.) string $data: buffer. callable $callback: callable variables. this callback expects (resource $handle, long $status)
void:
set Nagel's flags for specified tcp resource.
resource $handle: libuv tcp resource
bool $enable: true means enabled. false means disabled.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_nodelay($tcp, true);
accepts a connection on a socket.
resource $uv: uv_tcp or uv_pipe server resource
resource $uv: uv_tcp or uv_pipe client resource.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0',9999));
uv_listen($tcp,100, function($server){
$client = uv_tcp_init();
uv_accept($server, $client);
var_dump(uv_tcp_getsockname($server));
uv_read_start($client, function($socket, $nread, $buffer) use ($server){
var_dump($buffer);
uv_close($socket);
uv_close($server);
});
});
shutdown uv handle.
resource $handle: uv resources (uv_tcp, uv_udp, uv_pipe ...etc.) callable $callback: callable variables. this callback expects (resource $handle, long $status)
void:
close uv handle.
resource $handle: uv resources (uv_tcp, uv_udp, uv_pipe ...etc.) callable $callback: callable variables. this callback expects (resource $handle, long $status)
void:
starts read callback for uv resources.
resource $handle: uv resources (uv_tcp, uv_udp, uv_pipe ...etc.)
callable $callback: callable variables. this callback parameter expects (resource $handle, long $nread, string buffer)
void:
- You have to handle erorrs correctly. otherwise this will leak.
- if you want to use PHP's stream or socket resource. see uv_fs_poll_init and uv_fs_read.
stop read callback
resource $uv: uv resource handle which started uv_read.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0',9999));
uv_listen($tcp,100, function($server){
$client = uv_tcp_init();
uv_accept($server, $client);
var_dump(uv_tcp_getsockname($server));
uv_read_start($client, function($socket, $nread, $buffer) use ($server){
uv_read_stop($socket);
var_dump($buffer);
uv_close($socket);
uv_close($server);
});
});
create a ipv4 sockaddr.
string $ipv4_addr: ipv4 address
long $port: port number.
resource $uv_sockaddr: sockaddr resource
<?php
$sockaddr = uv_ip4_addr("127.0.0.1", 8080);
- check passed ip address is valid.
- check port number is valid
create a ipv6 sockaddr.
string $ipv6_addr: ipv6 address
long $port: port number.
resource $uv_sockaddr: sockaddr resource
<?php
$sockaddr = uv_ip6_addr("::1", 8080);
- check passed ip address is valid.
- check port number is valid
listens for a connection on a uv handle.
resource $handle: uv resource handle (tcp, udp and pipe)
long $backlog: backlog
callable $callback: this callback parameter expects (resource $connection, long $status)
*void *:
<?php
$tcp = uv_tcp_init();
uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0',9999));
uv_listen($tcp,100, function($server, $status){
$client = uv_tcp_init();
uv_accept($server, $client);
uv_read_start($client, function($socket, $nread, $buffer) use ($server){
var_dump($buffer);
uv_close($socket);
uv_close($server);
});
});
uv_run();
connect to specified ip address and port.
resource $handle: requires uv_tcp_init()
resource.
resource $ipv4_addr: requires uv_sockaddr resource.
callable $callback: callable variables.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_connect($tcp, uv_ip4_addr("127.0.0.1",8080), function($tcp_handle, $status){
uv_close($tcp_handle);
});
uv_run();
connect to specified ip address and port.
resource $handle: requires uv_tcp_init()
resource.
resource $ipv4_addr: requires uv_sockaddr resource.
callable $callback: callable variables.
void:
<?php
$tcp = uv_tcp_init();
uv_tcp_connect($tcp, uv_ip6_addr("::1",8080), function($tcp_handle, $status){
uv_close($tcp_handle);
});
uv_run();
initialize timer handle.
resource $loop: uv_loop resource.
resource $timer: initialized timer resource.
<?php
$timer = uv_timer_init();
initialize timer handle.
resource $loop: uv_loop resource.
long $timeout: periodical event starts when after this timeout. 1000 is 1 sec.
long $repeat: repeat interval. 1000 is 1 sec.
*void:
<?php
$timer = uv_timer_init();
$after_1_second = 1000;
$period_is_1_second = 1000;
uv_timer_start($timer, $after_1_seconds, $period_is_1_second, function($timer, $status){
echo "Hello\n";
});
uv_run();
stop specified timer.
resource $timer: uv timer resource.
long $retval:
<?php
$timer = uv_timer_init();
uv_timer_start($timer, 100, 100, function($timer, $status){
echo "Hello\n";
uv_timer_stop($timer);
});
uv_run();
restart timer.
resource $timer: uv_timer resource.
void:
set repeat count.
resource $uv_timer: uv_timer resource
long $repeat: repeat count
void:
returns repeat interval.
resource $uv_timer: uv_timer resource
long $repeat_time:
initialize uv idle handle.
resource $loop: uv_loop resource.
resource $idle: initialized idle handle.
<?php
$loop = uv_default_loop();
$idle = uv_idle_init($loop);
start idle callback.
resource $idle: uv_idle resource. callable $callback: idle callback.
long result:
<?php
$loop = uv_default_loop();
$idle = uv_idle_init();
$i = 0;
uv_idle_start($idle, function($idle_handle, $stat) use (&$i){
echo "count: {$i}" . PHP_EOL;
$i++;
if ($i > 3) {
uv_idle_stop($idle);
}
sleep(1);
});
uv_run();
stop idle callback.
resource $idle: uv_idle resource.
long result:
<?php
$loop = uv_default_loop();
$idle = uv_idle_init();
$i = 0;
uv_idle_start($idle, function($idle_handle, $stat) use (&$i){
echo "count: {$i}" . PHP_EOL;
$i++;
if ($i > 3) {
uv_idle_stop($idle);
}
sleep(1);
});
uv_run();
void uv_getaddrinfo(resource $loop, callable $callback, string $node, string $service, array $hints)
create a tcp socket.
resource $loop: loop resource or null. if not specified loop resource then use uv_default_loop resource.
resource php_uv: uv resource which initialized for tcp.
<?php
$tcp = uv_tcp_init();
return default loop handle.
resource $loop:
<?php
$loop = uv_default_loop();
create a new loop handle.
resource $loop:
<?php
$loop = uv_loop_new();
create a udp socket.
resource $loop: loop resource or null. if not specified loop resource then use uv_default_loop resource.
resource php_uv: uv resource which initialized for udp.
<?php
$udp = uv_udp_init();
listens for a connection on a uv udp handle.
resource $handle: uv resource handle (udp)
resource $uv_ip_addr: uv sockaddr(ipv4) resource.
long $flags: unused.
*void *:
<?php
$udp = uv_udp_init();
var_dump($udp);
uv_udp_bind($udp, uv_ip4_addr('0.0.0.0',10000));
uv_udp_recv_start($udp,function($stream, $nread, $buffer){
echo "recv:" . $buffer;
uv_close($stream);
});
$uv = uv_udp_init();
uv_udp_send($uv, "Hello", uv_ip4_addr("0.0.0.0",10000),function($uv, $s){
echo "success" . PHP_EOL;
uv_close($uv);
});
uv_run();
listens for a connection on a uv udp handle.
resource $handle: uv resource handle (udp)
resource $uv_ip_addr: uv sockaddr(ipv6) resource.
long $flags: Should be 0 or UV::UDP_IPV6ONLY
*void *:
<?php
$udp = uv_udp_init();
var_dump($udp);
uv_udp_bind6($udp, uv_ip6_addr('::1',10000));
uv_udp_recv_start($udp,function($stream, $nread, $buffer){
echo "recv:" . $buffer;
uv_close($stream);
});
$uv = uv_udp_init();
uv_udp_send6($uv, "Hello", uv_ip6_addr("::1",10000),function($uv, $s){
echo "success" . PHP_EOL;
uv_close($uv);
});
uv_run();
start receive callback.
resource $handle: uv resource handle (udp)
callable $callback: this callback parameter expects (resource $stream, long $nread, string $buffer).
*void *:
<?php
$udp = uv_udp_init();
var_dump($udp);
uv_udp_bind6($udp, uv_ip6_addr('::1',10000));
uv_udp_recv_start($udp,function($stream, $nread, $buffer){
echo "recv:" . $buffer;
uv_close($stream);
});
$uv = uv_udp_init();
uv_udp_send6($uv, "Hello", uv_ip6_addr("::1",10000),function($uv, $s){
echo "success" . PHP_EOL;
uv_close($uv);
});
uv_run();
stop receive callback.
resource $handle: uv resource handle (udp)
*void *:
long uv_udp_set_membership(resource $handle, string $multicast_addr, string $interface_addr, long $membership)
join or leave udp muticast group..
resource $handle: uv resource handle (udp)
string $multicast_addr: multicast address
string $interface_addr: interface address
long $membership: UV::JOIN_GROUP or UV::LEAVE_GROUP
*long *: result code
set multicast loop
resource $handle: uv resource handle (udp)
long $enabled:
void:
set multicast ttl
resource $handle: uv resource handle (udp)
long $ttl: multicast ttl
void:
set udp broadcast
resource $handle: uv resource handle (udp)
long $enabled:
void:
send buffer to specified address.
resource $handle: uv resource handle (udp)
string $data: data
resource uv_addr: uv_ip4_addr
callable $callback: this callback parameter expects (resource $stream, long $status).
*void *:
<?php
$udp = uv_udp_init();
var_dump($udp);
uv_udp_bind($udp, uv_ip4_addr('::1',10000));
uv_udp_recv_start($udp,function($stream, $nread, $buffer){
echo "recv:" . $buffer;
uv_close($stream);
});
$uv = uv_udp_init();
uv_udp_send($uv, "Hello", uv_ip4_addr("::1",10000),function($uv, $s){
echo "success" . PHP_EOL;
uv_close($uv);
});
uv_run();
send buffer to specified address.
resource $handle: uv resource handle (udp)
string $data: data
resource uv_addr: uv_ip6_addr
callable $callback: this callback parameter expects (resource $stream, long $status).
*void *:
<?php
$udp = uv_udp_init();
var_dump($udp);
uv_udp_bind6($udp, uv_ip6_addr('::1',10000));
uv_udp_recv_start($udp,function($stream, $nread, $buffer){
echo "recv:" . $buffer;
uv_close($stream);
});
$uv = uv_udp_init();
uv_udp_send6($uv, "Hello", uv_ip6_addr("::1",10000),function($uv, $s){
echo "success" . PHP_EOL;
uv_close($uv);
});
uv_run();
- implement this.
returns current uv type. (this is not libuv function. util for php-uv)
resource $uv_handle: uv_handle
long $handle_type: should return UV::IS_UV_* constatns. e.g) UV::IS_UV_TCP
<?php
$tcp = uv_tcp_init();
var_dump(uv_handle_type($tcp));
- this may change.
initialize pipe resource
resource $uv_loop: uv_loop resource
bool $ipc: when this pipe use for ipc, please set true otherwise false.
resource $uv_pipe:
<?php
$pipe = uv_pipe_init(uv_default_loop(), true);
open a pipe resource.
resource $uv_handle: uv pipe handle
*long $pipe: dunnno. maybe file descriptor.
void:
create a named pipe.
resource $uv_handle: uv pipe handle
*long $pipe: dunnno. maybe file descriptor.
void:
connect to named pipe.
resource $uv_handle: uv pipe handle
*string $path: named pipe path
*callable $callback: this callback parameter expects (resource $pipe, long $status)
void:
<?php
b = uv_pipe_init(uv_default_loop(), 0);
uv_pipe_connect($b, PIPE_PATH, function($a,$b){
uv_write($b,"Hello", function($stream,$stat){
uv_close($stream);
});
});
uv_run();
retunrs current loadaverage.
array $loadaverage:
<?php
var_dump(uv_loadavg());
//array(3) {
// [0]=>
// float(1.7421875)
// [1]=>
// float(1.427734375)
// [2]=>
// float(1.3955078125)
//}
returns array on windows box. (does not support load average on windows)
returns current uptime.
long $uptime:
<?php
var_dump(uv_uptime());
//float(1247516)
returns current free memory size.
long $free:
<?php
var_dump(uv_get_free_memory());
//int(135860224)
returns total memory size.
long $free:
<?php
var_dump(uv_get_total_memory());
//int(8589934592)
check implmentation
returns current exepath. basically this will returns current php path.
string $exepath:
<?php
var_dump(uv_exepath());
//string(53) "/Users/chobie/.phpenv/versions/5.4.1-zts-goto/bin/php"
```
### string uv_cwd(void)
##### *Description*
returns current working directory.
##### *Parameters*
##### *Return Value*
*string $cwd*:
##### *Example*
````php
<?php
var_dump(uv_cwd());
//string(24) "/Users/chobie/src/php-uv"
returns current cpu informations
.
array $cpu_info:
<?php
var_dump(uv_cpu_info());
//array(8) {
// [0]=>
// array(3) {
// ["model"]=>
// string(13) "MacBookPro8,2"
// ["speed"]=>
// int(2200)
// ["times"]=>
// array(5) {
// ["sys"]=>
// int(69952140)
// ["user"]=>
// int(38153450)
// ["idle"]=>
// int(776709120)
// ["irq"]=>
// int(0)
// ["nice"]=>
// int(0)
// }
// }...
resource uv_spawn(resource $loop, string $command, array $args, array $stdio, string $cwd, array $env = array(), callable $callback [,long $flags, array $options])
send signal to specified uv process resource.
resource $handle: uv resource handle (process)
long $signal:
void:
send signal to specified pid.
long $pid: process id
long $signal:
void:
change working directory.
string $directory:
*bool *:
initialize rwlock resource
resource $rwlock: returns uv rwlock resource
set read lock
resource $handle: uv resource handle (uv rwlock)
*void *:
- implemnt this correctly
unlock read lock
resource $handle: uv resource handle (uv rwlock)
void:
set write lock
resource $handle: uv resource handle (uv rwlock)
*void *:
- implement this correctly
unlock write lock
resource $handle: uv resource handle (uv rwlock)
void:
initialize mutex resource
resource $uv_mutex: uv mutex resource
lock mutex
resource $handle: uv resource handle (uv mutex)
void:
- implement this correctly
initialize semaphore resource
resource $uv_sem:
post semaphore
resource $handle: uv resource handle (uv sem)
void:
- implemnt this correctly
- implment this correctly
initialize prepare resource
resource $loop: uv loop handle
resource $uv_prepare:
<?php
$prepare = uv_prepare_init(uv_default_loop());
setup prepare loop callback. (pre loop callback)
resource $handle: uv resource handle (prepare)
callable $callback: this callback parameter expects (resource $prepare, long $status).
*long *:
<?php
$loop = uv_default_loop();
$prepare = uv_prepare_init($loop);
uv_prepare_start($prepare, function($rsc, $status){
echo "Hello";
uv_unref($rsc);
});
uv_run();
stop prepare callback
resource $prepare: uv resource handle (prepare)
long:
setup check resource
resource $loop: uv loop handle
resource uv_check:
<?php
$check = uv_check_init(uv_default_loop());
stats check loop callback. (after loop callback)
resource $handle: uv resource handle (check)
callable $callback: this callback parameter expects (resource $check, long $status).
*long *:
<?php
$loop = uv_default_loop();
$check = uv_check_init($loop);
$idle = uv_idle_init();
$i = 0;
uv_idle_start($idle, function($stat) use (&$i, $idle, $loop){
echo "count: {$i}" . PHP_EOL;
$i++;
if ($i > 3) {
uv_idle_stop($idle);
}
sleep(1);
});
uv_check_start($check, function($check, $status){
echo "Hello";
uv_check_stop($check);
});
uv_run();
stop check callback
resource $check: uv resource handle (check)
*void *:
setup async callback
resource $loop: uv loop resource
callback $callback:
*resource *: uv async resource
send async callback immidiately
resource $handle: uv async handle
void:
execute callbacks in another thread (requires Thread Safe enabled PHP)
open specified file
resource $loop: uv_loop resource.
string $path: file path
long $flag: file flag. this should be UV::O_RDONLY and some constants flag.
long $mode: mode flag. this should be UV::S_IRWXU and some mode flag.
callable $calback: this callback parameter expects (resource $stream)
void:
<?php
uv_fs_open(uv_default_loop(),"/tmp/hello",
UV::O_WRONLY | UV::O_CREAT | UV::O_APPEND,
UV::S_IRWXU | UV::S_IRUSR,
function($r){
uv_fs_write(uv_default_loop(),$r,"hello",0, function($a) use ($r){
uv_fs_fdatasync(uv_default_loop(),$r,function(){
echo "fsync finished";
});
});
});
uv_run();
async read.
resource $loop: uv loop handle
zval $fd: this expects long $fd, resource $php_stream or resource $php_socket.
resource $callback: this callback parameter expects (zval $fd, long $nread, string $buffer).
*void *:
close specified file descriptor.
resource $loop: uv_loop resource.
zval $fd: file descriptor. this expects long $fd, resource $php_stream or resource $php_socket.
callable $calback: this callback parameter expects (resource $stream)
void:
- handling PHP's stream and socket correctly.
write buffer to specified file descriptor.
resource $loop: uv_loop resource.
zval $fd: file descriptor. this expects long $fd, resource $php_stream or resource $php_socket.
string $buffer: buffer.
callable $calback: this callback parameter expects (resource $stream, long $result)
void:
async fsync
resource $handle: uv loop handle
zval $fd:
callable $callback:
void:
async fdatasync
resource $handle: uv loop handle
zval $fd:
callable $callback:
void:
async ftruncate
resource $handle: uv loop handle
zval $fd:
long $offset:
callable $callback:
void:
async mkdir
resource $handle: uv loop handle
string $path:
long $mode:
callable $callback:
void:
async rmdir
resource $handle: uv loop handle
string $path:
callable $callback:
void:
async unlink
resource $handle: uv loop handle
string $path:
callable $callback:
void:
async rename
resource $handle: uv loop handle
string $from:
string $to:
callable $callback:
void:
async utime
resource $handle: uv loop handle
string $path:
long $utime:
long $atime:
callable $callback:
void:
async futime
resource $handle: uv loop handle
zval $fd:
long $utime:
long $atime:
callable $callback:
void:
async chmod
resource $handle: uv loop handle
string $path:
long $mode:
callable $callback:
void:
async fchmod
resource $handle: uv loop handle
zval $fd:
long $mode:
callable $callback:
void:
async chown
resource $handle: uv loop handle
string $paht:
long $uid:
long $gid:
callable $callback:
void:
async fchown
resource $handle: uv loop handle
zval $fd:
long $uid:
long $gid:
callable $callback:
void:
async link
resource $handle: uv loop handle
string $from:
string $to:
callable $callback:
void:
async symlink
resource $handle: uv loop handle
string $from:
string $to:
long $flags:
callable $callback:
void:
async readlink
resource $handle: uv loop handle
string $path:
callable $callback:
void:
async stat
resource $handle: uv loop handle
string $path:
callable $callback: this callback parameter expects (resource $stream, array $stat)
void:
async lstat
resource $handle: uv loop handle
string $path:
callable $callback:
void:
async fstat
resource $handle: uv loop handle
zval $fd:
callable $callback:
void:
async readdir
resource $handle: uv loop handle
string $path:
long $flags:
callable $callback:
void:
void uv_fs_sendfile(resource $loop, zval $in_fd, zval $out_fd, long $offset, long $length, callable $callback)
async sendfile
resource $handle: uv loop handle
zval $in_fd:
zval $out_fd:
long $offset:
long $length:
callable $callback:
void:
initialize fs event.
resource $handle: uv loop handle
string $path:
callable $callback:
void:
initialize tty resource. you have to open tty your hand.
resource $handle: uv loop handle
zval $fd:
long $readable:
resource $uv_tty:
initialize poll
resource $uv_loop: uv_loop resource.
mixed $fd: this expects long fd, PHP's stream or PHP's socket resource.
resource uv: uv resource which initialized poll.
<?php
$fd = fopen("php://stdout","w+");
$poll = uv_poll_init(uv_default_loop(), $fd);
- if you want to use a socket. please use uv_poll_init_socket instead of this. Windows can't handle socket with this function.
- some platform doesn't support file descriptor on these method.
start polling
resource $poll: uv poll resource.
long $events: UV::READBLE and UV::WRITABLE flags.
callable $callback: this callback parameter expects (resource $poll, long $status, long $events, mixed $connection). the connection parameter passes uv_poll_init'd fd.
void:
<?php
$fd = fopen("php://stdout","w+");
$poll = uv_poll_init(uv_default_loop(), $fd);
uv_poll_start($poll, UV::WRITABLE, function($poll, $stat, $ev, $conn){
fwrite($conn, "Hello");
fclose($conn);
uv_poll_stop($poll);
});
uv_run();
- if you want to use a socket. please use uv_poll_init_socket instead of this. Windows can't handle socket with this function.
initialize http parser.
long $target: this expects UV::HTTP_REQUEST, UV::HTTP_RESPONSE or UV::HTTP_BOTH.
resource uv_http:
<?php
$parser = uv_http_parser_init(UV::HTTP_REQUEST);
execute http parser.
resource $parser: uv_http_parser resoruce.
string $body: http message.
array &$result: result array.
bool finished: this parser returns false when specified http message is invalid or not enough message.
<?php
$parser = uv_http_parser_init(UV::HTTP_REQUEST);
if (uv_http_parser_execute($parser, "GET /img/http-parser.png?key=value#frag HTTP/1.1
Host: chobie.net
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:12.0) Gecko/20100101 Firefox/12.0
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://chobie.net/
Cookie: key=value
Cache-Control: max-age=0
",$result)) {
var_dump($result);
//array(6) {
// ["headers"]=>
// array(8) {
// ["Host"]=>
// string(10) "chobie.net"
// ["User-Agent"]=>
// string(81) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:12.0) Gecko/20100101 Firefox/12.0"
// ["Accept-Language"]=>
// string(14) "en-us,en;q=0.5"
// ["Accept-Encoding"]=>
// string(13) "gzip, deflate"
// ["Connection"]=>
// string(10) "keep-alive"
// ["Referer"]=>
// string(18) "http://chobie.net/"
// ["Cookie"]=>
// string(9) "key=value"
// ["Cache-Control"]=>
// string(9) "max-age=0"
// }
// ["QUERY_STRING"]=>
// string(35) "/img/http-parser.png?key=value#frag"
// ["path"]=>
// string(20) "/img/http-parser.png"
// ["query"]=>
// string(9) "key=value"
// ["fragment"]=>
// string(4) "frag"
// ["REQUEST_METHOD"]=>
// string(3) "GET"
//}
}
resource $uv_loop: uv loop handle
void:
resource $uv_loop: uv loop handle
resource:
resource $sig_handle:
callable $callable: signal callback
int $sig_num: signal
void:
resource $sig_handle:
int $sig_num: