Apache2 Filter版PHP5に続いて他のFilterを実行する
PHP5をApache2 Filterとしてbuildした場合、PHPの処理の後に他のFilterを繋げようとしても実行されない気がするんですが、どうでしょう?>識者の方
Apache2.2.6+PHP5.2.5でしか確認していませんが、
LoadModule php5_module modules/libphp5.so <Location /> AddOutputFilter PHP;INCLUDES php </Location>
な設定で
<?php echo '<!--#include virtual="/path/to/include_file.html" -->';
というスクリプトを実行すると、SSIが実行されずそのまま表示されます。Apache2.2.6+PHP4.4.8では、期待通りinclude_file.htmlの内容が挿入されます。
PHP5.2.5とPHP4.4.8のsapi/apache2filter/sapi_apache2.cを見てみると、かなり違うコードになっていますが、
static int php_output_filter(ap_filter_t *f, apr_bucket_brigade *bb) { : b = apr_bucket_eos_create(f->c->bucket_alloc); APR_BRIGADE_INSERT_TAIL(pbb->bb, b); /* Pass whatever is left on the brigade. */ return ap_pass_brigade(f->next, pbb->bb); }
あたりでEOS(End Of Stream)を足しちゃってるので、次のFilterでstreamからデータが取れないとかそういう事なんですかね。だとすると、PHP5.2.0からダメっぽいなぁ。
まあ、元々EXPERIMENTAL扱いだし、PHPをFilterとして使う(使う必要がある)場面って思いつかないので、どうでも良いと言えば良いんですが、ちょっと気になったもので。。。
追記(2008/02/22 00:25)
肝心のPHPコードがうまく表示できていなかったのを修正しました。