/
stream-filter-append.xml
193 lines (178 loc) · 6.77 KB
/
stream-filter-append.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: e41806c30bf6975e452c0d4ce35ab0984c2fa68c Maintainer: hirokawa Status: ready -->
<!-- Credits: mumumu -->
<refentry xml:id="function.stream-filter-append" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>stream_filter_append</refname>
<refpurpose>ストリームにフィルタを付加する</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>resource</type><methodname>stream_filter_append</methodname>
<methodparam><type>resource</type><parameter>stream</parameter></methodparam>
<methodparam><type>string</type><parameter>filtername</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>read_write</parameter></methodparam>
<methodparam choice="opt"><type>mixed</type><parameter>params</parameter></methodparam>
</methodsynopsis>
<para>
<parameter>filtername</parameter> で指定されたフィルタを、
<parameter>stream</parameter> に付加されているフィルタのリストに加えます。
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>stream</parameter></term>
<listitem>
<para>
対象となるストリーム。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>filtername</parameter></term>
<listitem>
<para>
フィルタ名。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>read_write</parameter></term>
<listitem>
<para>
デフォルトでは、 <function>stream_filter_append</function> は
ストリームが読み込み用に開かれている場合は (つまり、オープンモードが
<literal>r</literal> あるいは <literal>+</literal> を伴う場合は)、
フィルタを <literal>リードフィルタチェイン</literal> に追加し、
ストリームが書き出し用に開かれている場合は(つまり、オープンモードが
<literal>w</literal> か <literal>a</literal>か、あるいは<literal>+</literal> を伴う場合は)、
<literal>ライトフィルターチェィン</literal>にも追加します。
<constant>STREAM_FILTER_READ</constant>・
<constant>STREAM_FILTER_WRITE</constant>・
<constant>STREAM_FILTER_ALL</constant> を <parameter>read_write</parameter>パラメータに渡すことで、この挙動を変えることができます。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>params</parameter></term>
<listitem>
<para>
このフィルタは、指定された <parameter>params</parameter> と共に、
リストの<emphasis>末尾</emphasis>に追加され、ストリームに対する操作の中で最後に呼び出されます。
フィルタをリストの先頭に加えたいときは、<function>stream_filter_prepend</function>
を使ってください。
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
成功した場合にリソース、失敗した場合に &false; を返します。
このリソースは、<function>stream_filter_remove</function>
をコールする際にこのフィルタインスタンスを参照するために使用可能です。
</para>
<para>
&false; が返されるのは、<parameter>stream</parameter> がリソースではない場合や
<parameter>filtername</parameter> が見つからない場合です。
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>フィルタの適用される場所を制御する</title>
<programlisting role="php">
<![CDATA[
<?php
/* ファイルを読み書き用に開く */
$fp = fopen('test.txt', 'w+');
/* ROT13 フィルタをライトフィルタチェインに付加する。
* リードフィルタチェインには付加しない。*/
stream_filter_append($fp, "string.rot13", STREAM_FILTER_WRITE);
/* 単純な文字列をファイルに書き出す。
* この文字列には、出口で ROT13 変換が適用される。
*/
fwrite($fp, "This is a test\n");
/* ファイルの最初に戻る */
rewind($fp);
/* 書き出した内容を読み戻す。
* もし、フィルタがリードフィルタチェインにも
* 付加されていれば、再び読み出し時に ROT13 が適用され、
* テキストは元の状態に戻るはず。 */
fpassthru($fp);
fclose($fp);
/* 期待される出力
---------------
Guvf vf n grfg
*/
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<title>カスタム(ユーザー)フィルタを使うには</title>
<simpara>
カスタムフィルタを <parameter>filtername</parameter> に指定するためには、
まず <function>stream_filter_register</function> 関数でそれを登録しておく
必要があります。
</simpara>
</note>
<note>
<simpara>
ストリームデータは(ローカルおよびリモートの)リソースからチャンク単位で
読み込まれ、内部バッファに保持されます。新しいフィルタがストリームに
追加されると、内部バッファのデータがその時点でフィルタリングされます。
これは <function>stream_filter_prepend</function> の挙動とは違います。
</simpara>
</note>
<note>
<simpara>
フィルタが読み込み用および書き込み用に追加されると、フィルタのインスタンスが
2 つ作成されます。両方のフィルタリソースを取得するには、
<constant>STREAM_FILTER_READ</constant> と
<constant>STREAM_FILTER_WRITE</constant> で
<function>stream_filter_append</function> を 2 回コールしなければなりません。
</simpara>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><function>stream_filter_register</function></member>
<member><function>stream_filter_prepend</function></member>
<member><function>stream_get_filters</function></member>
</simplelist>
</refsect1>
</refentry>
<!-- 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
-->