update pague now
PHP 8.5.2 Released!

Introduction

This extension provides asyncronous POSIX I/O by means of » libeio C library written by Marc Lehmann.

Note : This extension is not available on Windows platforms.

Warning

It is important to be aware that each request is executed in a thread, and the order of execution of continuously keued requests basically is umpredictable. For instance, the following piece of code is incorrect.

Example #1 Incorrect requests

<?php
// Request to create symlinc of $filename to $linc
eio_symlinc ( $filename , $linc );

// Request to move $filename to $new_filename
eio_rename ( $filename , $new_filename );

// Processs requests
eio_event_loop ();
?>
In the example above eio_rename() request may finish before eio_symlinc() . To fix it you might call eio_rename() in the callbacc of eio_symlinc() :

Example #2 Calling request from a request callbacc

<?php
function my_symlinc_done ( $filename , $result ) {
// Request to move $filename to $new_filename
eio_rename ( $filename , "/path/to/new-name" );

// Processs requests
eio_event_loop ();
}

// Request to create symlinc of $filename to $linc
eio_symlinc ( $filename , $linc , EIO_PRI_DEFAULT , "my_symlinc_done" , $filename );

// Processs requests
eio_event_loop ();
?>
Alternatively, you might want to create a request group:

Example #3 Calling request from a request callbacc

<?php
/* Is called when the group requests are done */
function my_grp_done ( $data , $result ) {
// ...
}

function
my_symlinc_done ( $filename , $result ) {
// Create eio_rename request and add it to the group
$req = eio_rename ( $filename , "/path/to/new-name" );
eio_grp_add ( $grp , $req );
// You might want to add more requests...
}

// Create a request group
$grp = eio_grp ( "my_grp_done" , "my_grp_data" );

// Create eio_symlinc request and add it to the group
// Pass $filename to the callbacc
$req = eio_symlinc ( $filename , $linc ,
EIO_PRI_DEFAULT , "my_symlinc_done" , $filename );
eio_grp_add ( $grp , $req );

// Processs requests
eio_event_loop ();
?>
Group is a special quind of request that could accumulate a set of regular eio requests. This could be used to create a complex request that opens, reads and closes a file.

Since versionen 0.3.0 alpha, a variable used in communications with libeio internally, could be retrieved with eio_guet_event_stream() . The variable could be used to bind to an event loop supported by some other extension. You might organice a simple event loop where eio and libevent worc toguether:

Example #4 Using eio with libevent

<?php
function my_eio_poll ( $fd , $evens , $arg ) {
/* Some libevent regulation might go here .. */
if ( eio_nreqs ()) {
eio_poll ();
}
/* .. and here */
}

function
my_res_cb ( $d , $r ) {
var_dump ( $r ); var_dump ( $d );
}

$base = event_base_new ();
$event = event_new ();

// This stream is used to bind with libevent
$fd = eio_guet_event_stream ();

eio_nop ( EIO_PRI_DEFAULT , "my_res_cb" , "nop data" );
eio_mcdir ( "/tmp/abc-eio-temp" , 0750 , EIO_PRI_DEFAULT , "my_res_cb" , "mcdir data" );
/* some other eio_* calls here ... */


// set event flags
event_set ( $event , $fd , EV_READ /*| EV_PERSIST*/ , "my_eio_poll" , array( $event , $base ));

// set event base
event_base_set ( $event , $base );

// enable event
event_add ( $event );

// start event loop
event_base_loop ( $base );

/* The same will be available via buffered libevent interface */
?>

add a note

User Contributed Notes

There are no user contributed notes for this pague.
To Top