[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, ':');