1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
4        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5              This file is generated from xml source: DO NOT EDIT
6        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7      -->
8<title>mod_ext_filter - Apache HTTP サーバ</title>
9<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="/style/css/prettify.css" />
12<script src="/style/scripts/prettify.js" type="text/javascript">
13</script>
14
15<link href="/images/favicon.ico" rel="shortcut icon" /></head>
16<body>
17<div id="page-header">
18<p class="menu"><a href="/mod/">モジュール</a> | <a href="/mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">用語</a> | <a href="/sitemap.html">サイトマップ</a></p>
19<p class="apache">Apache HTTP サーバ バージョン 2.2</p>
20<img alt="" src="/images/feather.gif" /></div>
21<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
22<div id="path">
23<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP サーバ</a> &gt; <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> &gt; <a href="../">バージョン 2.2</a> &gt; <a href="./">モジュール</a></div>
24<div id="page-content">
25<div id="preamble"><h1>Apache モジュール mod_ext_filter</h1>
26<div class="toplang">
27<p><span>翻訳済み言語: </span><a href="/en/mod/mod_ext_filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
28<a href="/ja/mod/mod_ext_filter.html" title="Japanese">&nbsp;ja&nbsp;</a> |
29<a href="/ko/mod/mod_ext_filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
30</div>
31<div class="outofdate">この日本語訳はすでに古くなっている
32            可能性があります。
33            最近更新された内容を見るには英語版をご覧下さい。
34        </div>
35<table class="module"><tr><th><a href="module-dict.html#Description">説明:</a></th><td>レスポンスのボディをクライアントに送る前に外部プログラムで処理する</td></tr>
36<tr><th><a href="module-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
37<tr><th><a href="module-dict.html#ModuleIdentifier">モジュール識別子:</a></th><td>ext_filter_module</td></tr>
38<tr><th><a href="module-dict.html#SourceFile">ソースファイル:</a></th><td>mod_ext_filter.c</td></tr></table>
39<h3>概要</h3>
40
41    <p><code class="module"><a href="/mod/mod_ext_filter.html">mod_ext_filter</a></code> では <a href="/filter.html">フィルタ</a>
42    の慣れ親しんだ単純なプログラミングモデルが提供されます。このモジュールを
43    使えば、標準入力から読み込んで、標準出力に書き出すプログラム
44    (すなわち Unix 形式のフィルタコマンド) を Apache のフィルタにすることが
45    できます。このフィルタの機構は、Apache API 向けに書かれた Apache
46    サーバプロセス内で実行される専用のフィルタよりもずっと遅いですが、
47    以下のような利点もあります。</p>
48
49    <ul>
50      <li>ずっとシンプルなプログラミングモデル</li>
51
52      <li>プログラムが標準入力から読んで標準出力に書くものである限り、
53      どんなプログラム言語やスクリプト言語でも使うことができる</li>
54
55      <li>既存のプログラムを変更することなく Apache のフィルタとして
56      使うことができる</li>
57    </ul>
58
59    <p>性能の問題により実運用に適さないとしても、フィルタのプロトタイプ用の
60    環境としては <code class="module"><a href="/mod/mod_ext_filter.html">mod_ext_filter</a></code> は使えます。</p>
61
62</div>
63<div id="quickview"><h3 class="directives">ディレクティブ</h3>
64<ul id="toc">
65<li><img alt="" src="/images/down.gif" /> <a href="#extfilterdefine">ExtFilterDefine</a></li>
66<li><img alt="" src="/images/down.gif" /> <a href="#extfilteroptions">ExtFilterOptions</a></li>
67</ul>
68<h3>トピック</h3>
69<ul id="topics">
70<li><img alt="" src="/images/down.gif" /> <a href="#examples">例</a></li>
71</ul><h3>参照</h3>
72<ul class="seealso">
73<li><a href="/filter.html">フィルタ</a></li>
74</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
75<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
76<div class="section">
77<h2><a name="examples" id="examples">例</a></h2>
78
79    <h3>他のタイプのレスポンスから HTML を生成する</h3>
80      <div class="example"><p><code>
81        # mod_ext_filter directive to define a filter<br />
82        # to HTML-ize text/c files using the external<br />
83        # program /usr/bin/enscript, with the type of<br />
84        # the result set to text/html<br />
85        ExtFilterDefine c-to-html mode=output \<br />
86        <span class="indent">
87          intype=text/c outtype=text/html \<br />
88          cmd="/usr/bin/enscript --color -W html -Ec -o - -"<br />
89        </span>
90        <br />
91        &lt;Directory "/export/home/trawick/apacheinst/htdocs/c"&gt;<br />
92        <span class="indent">
93          # core directive to cause the new filter to<br />
94          # be run on output<br />
95          SetOutputFilter c-to-html<br />
96          <br />
97          # mod_mime directive to set the type of .c<br />
98          # files to text/c<br />
99          AddType text/c .c<br />
100          <br />
101          # mod_ext_filter directive to set the debug<br />
102          # level just high enough to see a log message<br />
103          # per request showing the configuration in force<br />
104          ExtFilterOptions DebugLevel=1<br />
105        </span>
106        &lt;/Directory&gt;
107      </code></p></div>
108    
109
110    <h3>コンテントエンコーディングのフィルタを実装する</h3>
111      <p>注: この gzip の例はデモ用です。実用的な実装は
112      <code class="module"><a href="/mod/mod_deflate.html">mod_deflate</a></code> を参照してください。</p>
113
114      <div class="example"><p><code>
115        # mod_ext_filter directive to define the external filter<br />
116        ExtFilterDefine gzip mode=output cmd=/bin/gzip<br />
117        <br />
118        &lt;Location /gzipped&gt;<br />
119        <span class="indent">
120          # core directive to cause the gzip filter to be<br />
121          # run on output<br />
122          SetOutputFilter gzip<br />
123          <br />
124          # mod_header directive to add<br />
125          # "Content-Encoding: gzip" header field<br />
126          Header set Content-Encoding gzip<br />
127        </span>
128        &lt;/Location&gt;
129      </code></p></div>
130    
131
132    <h3>サーバを遅くする</h3>
133      <div class="example"><p><code>
134        # mod_ext_filter directive to define a filter<br />
135        # which runs everything through cat; cat doesn't<br />
136        # modify anything; it just introduces extra pathlength<br />
137        # and consumes more resources<br />
138        ExtFilterDefine slowdown mode=output cmd=/bin/cat \<br />
139        <span class="indent">
140          preservescontentlength<br />
141        </span>
142        <br />
143        &lt;Location /&gt;<br />
144        <span class="indent">
145          # core directive to cause the slowdown filter to<br />
146          # be run several times on output<br />
147          #<br />
148          SetOutputFilter slowdown;slowdown;slowdown<br />
149        </span>
150        &lt;/Location&gt;
151      </code></p></div>
152    
153
154    <h3>sed を使って応答中のテキストを置換する</h3>
155      <div class="example"><p><code>
156        # mod_ext_filter directive to define a filter which<br />
157        # replaces text in the response<br />
158        #<br />
159        ExtFilterDefine fixtext mode=output intype=text/html \<br />
160        <span class="indent">
161          cmd="/bin/sed s/verdana/arial/g"<br />
162        </span>
163        <br />
164        &lt;Location /&gt;<br />
165        <span class="indent">
166          # core directive to cause the fixtext filter to<br />
167          # be run on output<br />
168          SetOutputFilter fixtext<br />
169        </span>
170        &lt;/Location&gt;
171      </code></p></div>
172    
173
174    <h3>別のフィルタのトレース</h3>
175      <div class="example"><p><code>
176        # Trace the data read and written by mod_deflate<br />
177        # for a particular client (IP 192.168.1.31)<br />
178        # experiencing compression problems.<br />
179        # This filter will trace what goes into mod_deflate.<br />
180        ExtFilterDefine tracebefore \<br />
181        <span class="indent">
182          cmd="/bin/tracefilter.pl /tmp/tracebefore" \<br />
183          EnableEnv=trace_this_client<br />
184        </span>
185        <br />
186        # This filter will trace what goes after mod_deflate.<br />
187        # Note that without the ftype parameter, the default<br />
188        # filter type of AP_FTYPE_RESOURCE would cause the<br />
189        # filter to be placed *before* mod_deflate in the filter<br />
190        # chain.  Giving it a numeric value slightly higher than<br />
191        # AP_FTYPE_CONTENT_SET will ensure that it is placed<br />
192        # after mod_deflate.<br />
193        ExtFilterDefine traceafter \<br />
194        <span class="indent">
195          cmd="/bin/tracefilter.pl /tmp/traceafter" \<br />
196          EnableEnv=trace_this_client ftype=21<br />
197        </span>
198        <br />
199        &lt;Directory /usr/local/docs&gt;<br />
200        <span class="indent">
201          SetEnvIf Remote_Addr 192.168.1.31 trace_this_client<br />
202          SetOutputFilter tracebefore;deflate;traceafter<br />
203        </span>
204        &lt;/Directory&gt;
205      </code></p></div>
206
207      <div class="example"><h3>データをトレースするフィルタ:</h3><p><code>
208        #!/usr/local/bin/perl -w<br />
209        use strict;<br />
210        <br />
211        open(SAVE, "&gt;$ARGV[0]")<br />
212        <span class="indent">
213          or die "can't open $ARGV[0]: $?";<br />
214        </span>
215        <br />
216        while (&lt;STDIN&gt;) {<br />
217        <span class="indent">
218          print SAVE $_;<br />
219          print $_;<br />
220        </span>
221        }<br />
222        <br />
223        close(SAVE);
224      </code></p></div>
225    
226</div>
227<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
228<div class="directive-section"><h2><a name="ExtFilterDefine" id="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine" id="extfilterdefine">ディレクティブ</a></h2>
229<table class="directive">
230<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>外部フィルタを定義</td></tr>
231<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ExtFilterDefine <var>filtername</var> <var>parameters</var></code></td></tr>
232<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル</td></tr>
233<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
234<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_ext_filter</td></tr>
235</table>
236    <p><code class="directive">ExtFilterDefine</code> は、実行するプログラムや
237    引数など、外部フィルタの特性を定義します。</p>
238
239    <p><var>filtername</var> は定義するフィルタの名前を指定します。
240    この名前は後で <code class="directive"><a href="/mod/core.html#setoutputfilter">SetOutputFilter</a></code>
241    ディレクティブで指定できます。名前は登録されるすべてのフィルタで
242    一意でなくてはなりません。<em>現時点では、フィルタの登録 API からは
243    エラーは報告されません。ですから、重複する名前を使ってしまったときでも
244    ユーザにはそのことは報告されません。</em></p>
245
246    <p>続くパラメータの順番は関係無く、それらは実行する外部コマンドと、
247    他の特性を定義します。<code>cmd=</code> だけが必須のパラメータです。
248    指定可能なパラメータは:</p>
249
250    <dl>
251      <dt><code>cmd=<var>cmdline</var></code></dt>
252
253      <dd><code>cmd=</code> キーワードは実行する外部コマンドを指定します。
254      プログラム名の後に引数がある場合は、コマンド行は引用符で囲む
255      必要があります (<em>例えば</em>、<code>cmd="<var>/bin/mypgm</var>
256      <var>arg1</var> <var>arg2</var>"</code> のように)。プログラムは
257      シェル経由でなく、直接実行されますので、通常のシェル用の
258      エスケープは必要ありません。プログラムの引数は空白で区切られます。
259      プログラムの引数の一部となる必要のある空白はバックスペースでエスケープ
260      できます。引数の一部になるバックスラッシュはバックスラッシュで
261      エスケープする必要があります。標準の CGI 環境変数に加えて、
262      環境変数 DOCUMENT_URI, DOCUMENT_PATH_INFO, and 
263      QUERY_STRING_UNESCAPED がプログラムのために設定されます。</dd>
264
265      <dt><code>mode=<var>mode</var></code></dt>
266
267      <dd>応答を処理するフィルタには <code>mode=output</code> (デフォルト)
268      を使います。リクエストを処理するフィルタには <code>mode=input</code>
269      を使います。<code>mode=input</code> は Apache 2.1 以降で使用できます。</dd>
270
271      <dt><code>intype=<var>imt</var></code></dt>
272
273      <dd>このパラメータはフィルタされるべきドキュメントの
274      インターネットメディアタイプ (<em>すなわち</em>、MIME タイプ) を
275      指定します。デフォルトではすべてのドキュメントがフィルタされます。
276      <code>intype=</code> が指定されていれば、フィルタは指定されていない
277      ドキュメントには適用されなくなります。</dd>
278
279      <dt><code>outtype=<var>imt</var></code></dt>
280
281      <dd>このパラメータはフィルタされたドキュメントの
282      インターネットメディアタイプ (<em>すなわち</em>、MIME タイプ) を
283      指定します。フィルタ動作にともなってインターネットメディアタイプが
284      変わる場合に有用です。デフォルトではインターネットメディアタイプは
285      変更されません。</dd>
286
287      <dt><code>PreservesContentLength</code></dt>
288
289      <dd><code>PreservesContentLength</code> キーワードはフィルタが
290      content length <span class="transnote">(<em>訳注:</em> コンテントの長さ)</span>
291      を変更しないということを指定します。ほとんどのフィルタは
292      content length を変更するため、これはデフォルトではありません。
293      フィルタが長さを変えないときは、このキーワードを指定すると
294      よいでしょう。</dd>
295
296      <dt><code>ftype=<var>filtertype</var></code></dt>
297
298      <dd>このパラメータはフィルタが登録されるべきフィルタタイプの
299      数値を指定します。ほとんどの場合は、デフォルトの AP_FTYPE_RESOURCE で
300      十分です。フィルタがフィルタチェーンの別の場所で動作する必要がある
301      場合は、このパラメータを指定する必要があります。指定可能な値は
302      util_filter.h の AP_FTYPE_foo 定義を参照してください。</dd>
303
304      <dt><code>disableenv=<var>env</var></code></dt>
305
306      <dd>設定されていた場合にフィルタを無効にするための環境変数を
307      指定します。</dd>
308
309      <dt><code>enableenv=<var>env</var></code></dt>
310
311      <dd>このパラメータはフィルタが有効になるために設定されていなければ
312      ならない環境変数を指定します。</dd>
313    </dl>
314
315</div>
316<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
317<div class="directive-section"><h2><a name="ExtFilterOptions" id="ExtFilterOptions">ExtFilterOptions</a> <a name="extfilteroptions" id="extfilteroptions">ディレクティブ</a></h2>
318<table class="directive">
319<tr><th><a href="directive-dict.html#Description">説明:</a></th><td><code class="module"><a href="/mod/mod_ext_filter.html">mod_ext_filter</a></code> のオプションを設定</td></tr>
320<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ExtFilterOptions <var>option</var> [<var>option</var>] ...</code></td></tr>
321<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ExtFilterOptions DebugLevel=0 NoLogStderr</code></td></tr>
322<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ</td></tr>
323<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
324<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_ext_filter</td></tr>
325</table>
326    <p><code class="directive">ExtFilterOptions</code> ディレクティブは
327    <code class="module"><a href="/mod/mod_ext_filter.html">mod_ext_filter</a></code> の特別な処理用のオプションを
328    指定します。<var>Option</var> には以下のどれかを指定します。</p>
329
330    <dl>
331      <dt><code>DebugLevel=<var>n</var></code></dt>
332
333      <dd>
334        <code>DebugLevel</code> で <code class="module"><a href="/mod/mod_ext_filter.html">mod_ext_filter</a></code> 
335        の生成するデバッグメッセージのレベルを設定できます。
336        デフォルトでは、デバッグメッセージは生成されません。
337        これは <code>DebugLevel=0</code> と設定するのと同じです。
338        数字が大きくなればなるほど、より多くのデバッグメッセージが
339        生成され、サーバの性能は落ちます。数値の実際の意味は
340        <code>mod_ext_filter.c</code> の先頭近くの DBGLVL_ 定数の
341        定義で説明されています。
342
343        <p>注: デバッグメッセージを Apache のエラーログに
344        保存するようにするためには、core のディレクティブ 
345        <code class="directive"><a href="/mod/core.html#loglevel">LogLevel</a></code> 
346        を使う必要があります。</p>
347      </dd>
348
349      <dt><code>LogStderr | NoLogStderr</code></dt>
350
351      <dd><code>LogStderr</code> キーワードは外部フィルタプログラムにより
352      標準エラー <span class="transnote">(<em>訳注:</em> stderr)</span> に書かれたメッセージを
353      Apache のエラーログに保存するようにします。<code>NoLogStderr</code> は
354      逆に保存しないようにします。</dd>
355    </dl>
356
357    <div class="example"><h3>例</h3><p><code>
358      ExtFilterOptions LogStderr DebugLevel=0
359    </code></p></div>
360
361    <p>この例では、フィルタの標準出力に書かれたメッセージは
362    Apache のエラーログに保存されます。<code class="module"><a href="/mod/mod_ext_filter.html">mod_ext_filter</a></code> からは
363    デバッグメッセージは生成されません。</p>
364
365</div>
366</div>
367<div class="bottomlang">
368<p><span>翻訳済み言語: </span><a href="/en/mod/mod_ext_filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
369<a href="/ja/mod/mod_ext_filter.html" title="Japanese">&nbsp;ja&nbsp;</a> |
370<a href="/ko/mod/mod_ext_filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
371</div><div class="top"><a href="#page-header"><img src="/images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
372<script type="text/javascript"><!--//--><![CDATA[//><!--
373var comments_shortname = 'httpd';
374var comments_identifier = 'http://httpd.apache.org/docs/2.2/mod/mod_ext_filter.html';
375(function(w, d) {
376    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
377        d.write('<div id="comments_thread"><\/div>');
378        var s = d.createElement('script');
379        s.type = 'text/javascript';
380        s.async = true;
381        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
382        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
383    }
384    else { 
385        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
386    }
387})(window, document);
388//--><!]]></script></div><div id="footer">
389<p class="apache">Copyright 2013 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p>
390<p class="menu"><a href="/mod/">モジュール</a> | <a href="/mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">用語</a> | <a href="/sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
391if (typeof(prettyPrint) !== 'undefined') {
392    prettyPrint();
393}
394//--><!]]></script>
395</body></html>