mirror of
https://github.com/php/doc-ja.git
synced 2026-03-23 22:52:11 +01:00
304 lines
6.8 KiB
XML
304 lines
6.8 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 3ae6fd023622fc1f5198b63b3e002b41c106f012 Maintainer: takagi Status: ready -->
|
|
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="eio.examples">
|
|
&reftitle.examples;
|
|
<example>
|
|
<title>リクエストの取り消し</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/* eio_nop() が終わったら呼ばれます */
|
|
function my_nop_cb($data, $result) {
|
|
echo "my_nop ", $data, "\n";
|
|
}
|
|
|
|
// この eio_nop() の呼び出しは取り消されます
|
|
$req = eio_nop(EIO_PRI_DEFAULT, "my_nop_cb", "1");
|
|
var_dump($req);
|
|
eio_cancel($req);
|
|
|
|
// この eio_nop() は処理されます
|
|
eio_nop(EIO_PRI_DEFAULT, "my_nop_cb", "2");
|
|
|
|
// リクエストを処理します
|
|
eio_event_loop();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs.similar;
|
|
<screen>
|
|
<![CDATA[
|
|
resource(4) of type (EIO Request Descriptor)
|
|
my_nop 2
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
|
|
<example>
|
|
<title><function>eio_chmod</function> の呼び出し</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$temp_filename = dirname(__FILE__) ."/eio-temp-file.tmp";
|
|
touch($temp_filename);
|
|
|
|
/* eio_chmod() が終わったら呼ばれます */
|
|
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();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs.similar;
|
|
<screen>
|
|
<![CDATA[
|
|
eio_chmod_ok
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
|
|
<example>
|
|
<title>カスタムリクエストの作成</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/* カスタムコールバック */
|
|
function my_custom_callback($data, $result) {
|
|
var_dump($data);
|
|
var_dump(count($result));
|
|
var_dump($result['data_modified']);
|
|
var_dump($result['result']);
|
|
}
|
|
|
|
/* カスタムリクエスト */
|
|
function my_custom($data) {
|
|
var_dump($data);
|
|
|
|
$result = array(
|
|
'result' => 1001,
|
|
'data_modified' => "my custom data",
|
|
);
|
|
|
|
return $result;
|
|
}
|
|
|
|
$data = "my_custom_data";
|
|
$req = eio_custom("my_custom", EIO_PRI_DEFAULT, "my_custom_callback", $data);
|
|
var_dump($req);
|
|
eio_event_loop();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs.similar;
|
|
<screen>
|
|
<![CDATA[
|
|
resource(4) of type (EIO Request Descriptor)
|
|
string(14) "my_custom_data"
|
|
string(14) "my_custom_data"
|
|
int(2)
|
|
string(14) "my custom data"
|
|
int(1001)
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
|
|
<para>
|
|
<example>
|
|
<title>リクエストのグループ化</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/*
|
|
* ファイルを開き、読んでから閉じるグループリクエストを作ります
|
|
*/
|
|
|
|
$temp_filename = dirname(__FILE__) ."/eio-file.tmp";
|
|
$fp = fopen($temp_filename, "w");
|
|
fwrite($fp, "some data");
|
|
fclose($fp);
|
|
|
|
/* グループリクエストが終了したときに呼ばれます */
|
|
function my_grp_done($data, $result) {
|
|
global $temp_filename;
|
|
var_dump($result == 0);
|
|
@unlink($temp_filename);
|
|
}
|
|
|
|
/* eio_open() が終わったら呼ばれます */
|
|
function my_grp_file_opened_callback($data, $result) {
|
|
global $my_file_fd, $grp;
|
|
|
|
$my_file_fd = $result;
|
|
|
|
var_dump($result > 0);
|
|
|
|
// eio_read() リクエストを作ってグループに追加します
|
|
$req = eio_read($my_file_fd, 4, 0, EIO_PRI_DEFAULT, "my_grp_file_read_callback");
|
|
eio_grp_add($grp, $req);
|
|
}
|
|
|
|
/* eio_read() が終わったら呼ばれます */
|
|
function my_grp_file_read_callback($data, $result) {
|
|
global $my_file_fd, $grp;
|
|
|
|
var_dump($result);
|
|
|
|
// eio_close() リクエストを作ってグループに追加します
|
|
$req = eio_close($my_file_fd);
|
|
eio_grp_add($grp, $req);
|
|
}
|
|
|
|
$grp = eio_grp("my_grp_done", "my_grp_data");
|
|
|
|
// eio_open() リクエストを作ってグループに追加します
|
|
$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();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs.similar;
|
|
<screen>
|
|
<![CDATA[
|
|
resource(6) of type (EIO Group Descriptor)
|
|
bool(true)
|
|
string(4) "some"
|
|
bool(true)
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
|
|
<example>
|
|
<title>eio と libevent 拡張モジュールを組み合わせる</title>
|
|
<programlisting role="php"><![CDATA[
|
|
<?php
|
|
function my_eio_poll($fd, $events, $arg) {
|
|
/* libevent の設定があればここに書きます .. */
|
|
if (eio_nreqs()) {
|
|
eio_poll();
|
|
}
|
|
/* .. そしてここにも書きます */
|
|
}
|
|
|
|
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");
|
|
/* その他の eio_* コール ... */
|
|
|
|
|
|
// イベントフラグを設定します
|
|
event_set($event, $fd, EV_READ /*| EV_PERSIST*/, "my_eio_poll", array($event, $base));
|
|
|
|
// イベントベースを設定します
|
|
event_base_set($event, $base);
|
|
|
|
// イベントを有効化します
|
|
event_add($event);
|
|
|
|
// イベントループを開始します
|
|
event_base_loop($base);
|
|
|
|
/* バッファつき libevent インターフェイスでも同様にできます */
|
|
?>
|
|
]]></programlisting>
|
|
|
|
&example.outputs.similar;
|
|
<screen>
|
|
<![CDATA[
|
|
int(3)
|
|
int(0)
|
|
string(8) "nop data"
|
|
int(0)
|
|
string(10) "mkdir data"
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
|
|
<example>
|
|
<title>eio と event 拡張モジュールを組み合わせる</title>
|
|
<programlisting role="php"><![CDATA[
|
|
<?php
|
|
$base = new EventBase();
|
|
|
|
// eio ポーリングストリームを取得します
|
|
// この変数は、イベントループの実行中ずっと有効でなければいけないことに注意しましょう
|
|
$eio_stream = eio_get_event_stream();
|
|
|
|
// eio ポーリングストリームをイベントループにバインドします
|
|
$poll_event = new Event($base, $eio_stream, Event::READ, function () {
|
|
if (eio_nreqs()) {
|
|
eio_poll();
|
|
}
|
|
});
|
|
$poll_event->add();
|
|
|
|
// eio ジョブを追加します
|
|
eio_nop(EIO_PRI_DEFAULT, function () {
|
|
echo "eio_nop\n";
|
|
});
|
|
|
|
// イベントを追加します
|
|
$timer = Event::timer($base, function () {
|
|
echo "2 seconds elapsed\n";
|
|
});
|
|
$timer->add(2);
|
|
|
|
// イベントをディスパッチします
|
|
$base->dispatch();
|
|
?>
|
|
]]></programlisting>
|
|
|
|
&example.outputs.similar;
|
|
<screen>
|
|
<![CDATA[
|
|
eio_nop
|
|
2 seconds elapsed
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
|
|
</chapter>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|