[PHP-users 1635] Re: mb_output_handler()+phps でコアダンプ

php-users@php.gr.jp php-users@php.gr.jp
Wed, 29 Aug 2001 08:55:01 +0900 (JST)


こんにちは、塚田と申します。

この件で、何も表示されないのと、メモリ違反の例外が
あがるのは、別の問題のように思います。でも、多少は
関連があります。

表示されないほうは、添付リスト1のあたりを直せば
よいと思うのですが、send_parsed_php_source()
が呼ばれたときに php_request_shutdown() を
行わずに戻っているのは、何か理由があるのかもしれません。

メモリ違反のほうは、添付リスト2のあたりを直せば
よいと思うのですが、本当は出力バッファのコールバック
関数で SAPI の関数を呼ぶのはよくないのかもしれません。
だとすれば、mbstringモジュールで charset バラメータ
を付加する機能はあきらめなくてはなりません。

何らかの設計を行う時には、発散する局面と収束する局面が
あって、発散するときには矛盾を恐れずに実装を行うべき
だと思います。
ということで、出力バッファの機能が収束するには、
もう少し時間がかかると思います。

出力バッファに関する情報として、セッション関連でURLの
置換が出力バッファのコールバック関数として実装されました。
今後 php.ini の設定としては、

  output_buffering
  output_handler
  session.auto_start
  session.use_trans_sid
  zlib.output_compression

などが関係してきますが、複数の機能を有効にした場合に
出力バッファの順番が期待通りにならない場合が出てきます。
ですから、これらの機能はなるべくスクリプトから制御する
のがよいと思います。
望ましい順番は、多分次のようになると思います。

  ob_start("ob_gzhandler");
  ob_start("mb_output_handler");
  session_start();


-- 
sender: Tsukada Takuya (塚田 卓也)
town: inaba hizume, Nagano City (長野市稲葉日詰)



・添付リスト1
===================================================================
RCS file: /repository/php4/sapi/apache/sapi_apache.c,v
retrieving revision 1.33
diff -u -r1.33 sapi_apache.c
--- sapi_apache.c       5 Aug 2001 01:42:45 -0000       1.33
+++ sapi_apache.c       28 Aug 2001 22:26:07 -0000
@@ -75,11 +75,14 @@
                zend_syntax_highlighter_ini syntax_highlighter_ini;
 
                php_get_highlight_struct(&syntax_highlighter_ini);
+               highlight_file(SG(request_info).path_translated, &syntax_highlighter_ini TSRMLS_CC);
+#if 0
                if (highlight_file(SG(request_info).path_translated, &syntax_highlighter_ini TSRMLS_CC)){
                        return OK;
                } else {
                        return NOT_FOUND;
                }
+#endif
        } else {
                file_handle.type = ZEND_HANDLE_FILENAME;
                file_handle.handle.fd = 0;


・添付リスト2
===================================================================
RCS file: /repository/php4/sapi/apache/mod_php4.c,v
retrieving revision 1.119
diff -u -r1.119 mod_php4.c
--- mod_php4.c  14 Aug 2001 08:33:21 -0000      1.119
+++ mod_php4.c  28 Aug 2001 22:24:21 -0000
@@ -190,6 +190,10 @@
        char *header_name, *header_content, *p;
        request_rec *r = (request_rec *) SG(server_context);
 
+       if (!r) {
+               return 0;
+       }
+
        header_name = sapi_header->header;
 
        header_content = p = strchr(header_name, ':');