[PHP-users 5583] 出力バッファのせい?

Go Hamamura php-users@php.gr.jp
Wed, 20 Feb 2002 17:20:20 +0900


浜村です。
しつこくi-modeの話題で恐縮ですが(^^;

"PIA @ ACR Linx" さんは書きました:
>下記シグネチャの私のサイトにて、変換ライブラリを公開しております。
>(竹内さんのコードがベースです。)
>
>          __________________________________________________
>
>           PIA @ ACR Linx Inc.
>                                          pia@acrlinx.ne.jp
>                   http://www.acrlinx.ne.jp/~pia/index.html
>          __________________________________________________

おお。これはいいですね。ありがたく使わせていただこうと思います。

それでさっそく、絵文字を&#10進数;形式ではなく2バイトのコードとして出力す
るようにしようと思い、変換ライブラリにあったentities_decode関数で

function imode_output_handler($contents)
{
    $contents = mb_convert_encoding($contents, "SJIS", "EUC-JP");
    $contents = entities_decode($contents, TRUE);

    return $contents;
}


という処理を用意し、php.iniで、

output_buffering = On
output_handler = imode_output_handler

としてみたのですが、Apacheのプロセスが時々落ちるようになってしまいました。
試しに、output_buffering = Offにして、

ob_start("imode_output_handler");

という処理を各スクリプトの最初で実行するようにもしてみましたが、同じでし
た。

↓Apacheのエラーログです
[Wed Feb 20 14:02:28 2002] [notice] child pid 7260 exit signal Bus Error 
(10)
[Wed Feb 20 14:04:11 2002] [notice] child pid 7365 exit signal 
Segmentation Fault (11)

なお、imode_output_handler関数がreturnする直前で、error_log($contents)と
してバッファの内容を確認したところ、きちんと変換されていました。


ここで、entities_decode関数の部分をコメントアウトしてみたところ、落ちな
くなりました。
……もしかして、出力バッファの内容に、i-mode絵文字の領域のコードが混じっ
ていてはいけないのでしょうか?


(環境)
・OS
Solaris 8 (SPARC)
・PHPのバージョン
4.1.1
・configureオプション
./configure --with-oci8 --enable-sigchild --without-mysql --with-apache=..
/apache_1.3.22 --enable-track-vars --enable-mbstring
・mbregex
共有モジュールとしてインストールしてあります
・php.ini
mbstring.internal_encoding = EUC-JP
mbstring.http_input = pass
mbstring.http_output = pass
output_buffering = Off

--
 浜村 剛 <hamamura@mvb.biglobe.ne.jp>