Exemples
Exemple #1 Annulation d'une demande
<?php
/* Sera appelé lorsque la fonction eio_nop() aura terminé */
function my_nop_cb($data, $result) {
echo "my_nop ", $data, "\n";
}
// L'appel eio_nop() sera annulé
$req = eio_nop(EIO_PRI_DEFAULT, "my_nop_cb", "1");
var_dump($req);
eio_cancel($req);
// Cette fois, eio_nop() sera exécuté
eio_nop(EIO_PRI_DEFAULT, "my_nop_cb", "2");
// Exécution des demandes
eio_event_loop();
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
resource(4) of type (EIO Request Descriptor) my_nop 2
Exemple #2 Appel de la fonction eio_chmod()
<?php
$temp_filename = dirname(__FILE__) ."/eio-temp-file.tmp";
touch($temp_filename);
/* Sera appelé lorsque la fonction eio_chmod() aura terminé */
function my_chmod_callback($data, $result) {
global $temp_filename;
if ($result == 0 && !is_readable($temp_filename) && is_writable($temp_filename)) {
echo "eio_chmod_ok";
}
@unlink($temp_filename);
}
eio_chmod($temp_filename, 0200, EIO_PRI_DEFAULT, "my_chmod_callback");
eio_event_loop();
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
eio_chmod_ok
Exemple #3 Fabrication d'une demande personnalisée
<?php
/* Fonction de rappel pour la fonction de rappel personnalisée */
function my_custom_callback($data, $result) {
var_dump($data);
var_dump(count($result));
var_dump($result['data_modified']);
var_dump($result['result']);
}
/* La demande personnalisée */
function my_custom($data) {
var_dump($data);
$result = array(
'result' => 1001,
'data_modified' => "mes données personnalisées",
);
return $result;
}
$data = "my_custom_data";
$req = eio_custom("my_custom", EIO_PRI_DEFAULT, "my_custom_callback", $data);
var_dump($req);
eio_event_loop();
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
resource(4) of type (EIO Request Descriptor) string(14) "my_custom_data" string(14) "my_custom_data" int(2) string(26) "mes données personnalisées" int(1001)
Exemple #4 Création d'un groupe de demandes
<?php
/*
* Crée un groupe de demandes permettant d'ouvrir, de lire et de fermer un fichier
*/
$temp_filename = dirname(__FILE__) ."/eio-file.tmp";
$fp = fopen($temp_filename, "w");
fwrite($fp, "some data");
fclose($fp);
/* Sera appelé lorsque le groupe de demandes aura terminé */
function my_grp_done($data, $result) {
global $temp_filename;
var_dump($result == 0);
@unlink($temp_filename);
}
/* Sera appelé lorsque la fonction eio_open() aura terminé */
function my_grp_file_opened_callback($data, $result) {
global $my_file_fd, $grp;
$my_file_fd = $result;
var_dump($result > 0);
// Crée une demande eio_read() et l'ajoute au groupe
$req = eio_read($my_file_fd, 4, 0, EIO_PRI_DEFAULT, "my_grp_file_read_callback");
eio_grp_add($grp, $req);
}
/* Sera appelé lorsque la fonction eio_read() aura terminé */
function my_grp_file_read_callback($data, $result) {
global $my_file_fd, $grp;
var_dump($result);
// Crée une demande eio_close() et l'ajoute au groupe
$req = eio_close($my_file_fd);
eio_grp_add($grp, $req);
}
$grp = eio_grp("my_grp_done", "my_grp_data");
// Crée une demande eio_open() et l'ajoute au groupe
$req = eio_open($temp_filename, EIO_O_RDWR | EIO_O_APPEND , NULL,
EIO_PRI_DEFAULT, "my_grp_file_opened_callback", NULL);
eio_grp_add($grp, $req);
var_dump($grp);
eio_event_loop();
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
resource(6) of type (EIO Group Descriptor) bool(true) string(4) "some" bool(true)
Exemple #5 Utilisation de eio avec libevent
<?php
function my_eio_poll($fd, $events, $arg) {
/* Quelques régulations de libevent peuvent venir ici .. */
if (eio_nreqs()) {
eio_poll();
}
/* .. et ici */
}
function my_nop_cb($d, $r) {
var_dump($r); var_dump($d);
}
$base = event_base_new();
$event = event_new();
$fd = eio_get_event_stream();
var_dump($fd);
eio_nop(EIO_PRI_DEFAULT, "my_nop_cb", "nop data");
eio_mkdir("/tmp/abc-eio-temp", 0750, EIO_PRI_DEFAULT, "my_nop_cb", "nop data");
/* d'autres appels eio_* ici ... */
// Définit les drapeaux de l'événement
event_set($event, $fd, EV_READ /*| EV_PERSIST*/, "my_eio_poll", array($event, $base));
// Définit l'événement de base
event_base_set($event, $base);
// Active l'événement
event_add($event);
// Démarre la boucle d'événements
event_base_loop($base);
/* La mêmme chose est disponible viia l'interface libevent bufferisé */
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
int(3) int(0) string(8) "nop data" int(0) string(10) "mkdir data"
Exemple #6 Utilisation de eio avec l'extension event
<?php
$base = new EventBase();
// Retourne le flux d'interrogation eio.
// Notez que cette variable doit être active tant que la boucle d'événements est en cours d'exécution.
$eio_stream = eio_get_event_stream();
// Lie le flux d'interrogation eio à la boucle d'événement.
$poll_event = new Event($base, $eio_stream, Event::READ, function () {
if (eio_nreqs()) {
eio_poll();
}
});
$poll_event->add();
// Ajoute le job eio
eio_nop(EIO_PRI_DEFAULT, function () {
echo "eio_nop\n";
});
// Ajout les événements
$timer = Event::timer($base, function () {
echo "2 seconds elapsed\n";
});
$timer->add(2);
// Envoi les événements.
$base->dispatch();
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
eio_nop 2 seconds elapsed
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-eio.examples.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.