[PHP-dev 1418] Re: [PHP-users 33830] .htaccessのmbstring系の設定がディレクトリをまたいで他のphpに反映されてしまう現象について
KATOH Yasufumi
karma @ jazz.email.ne.jp
2008年 7月 31日 (木) 20:41:40 JST
加藤泰文です.
PHP-users 33830 の件,調べてみました.users に出すか,dev に出すか迷っ
たんですが,こっちに出してみます.
とりあえず "script_encoding" のみに話を絞ります.
# PHP の extension のソースを見るのは初めてで,わけのわからないマクロ
# ばかりで,よくわからなかったので,ボケていたらご指摘ください.
>>> On Wed, 16 Jul 2008 00:50:38 +0900
in message "[PHP-users 33830] .htaccessのmbstring系の設定がディレクトリをまたいで他のphpに反映されてしまう現象について"
kurt-san wrote:
> ■phpinfoのmbstringまわりの表示項目(関係ありそうな部分だけ抜粋)
> mbstring.script_encoding |no value |no value
php.ini では何も設定しません.
> ※階層を簡単に説明するとこのような感じにしておきます
> .
> ├─dir1
> │ .htaccess(mbstring.script_encodingを設定)
> │ test.php(EUC-JPで記述)
> │
> └─dir2
> test.php(UTF-8で記述)
という風にファイルを配置します.
--- ここまでは PHP-users での話と同じ.
たぶん,今回の問題は
- php.ini で何も値を設定しない.
- .htaccess で値が設定されているディレクトリ/パスを訪れた後,.htaccess
で値が設定されないディレクトリを訪れたとき
に発症 (?) します.
mbstring.c をデバッガでおっかけました.
(1) .htaccess で値が設定されている場合 (dir1)
1. static PHP_INI_MH(OnUpdate_mbstring_script_encoding) に飛んで,こ
の中で .htaccess にある値で mbstring_globals.script_encoding_list
が書き換えられる.(...list_size もですが,書くの面倒なので後は書きま
せん)
2. その後,PHP_RINIT_FUNCTION(mbstring) 内で
php_mb_set_zend_encoding が呼ば
れ,mbstring_globals.script_encoding_list の値を見て,処理が行わ
れる.
(2) .htaccess で値が設定されていない場合 (dir2)
1. (1) の 2 が実行される.
という動きだと思います.
php.ini に値が設定されていれば,(2)-1 が実行される時には,既に php.ini
の値が mbstring_globals.script_encoding_list にセットされているので
(これはどこでセットされるのでしょ? Apache がモジュール呼ぶときに?),そ
の前に mbstring_globals.script_encoding_list に php.ini と違う値があっ
ても問題はないようです.
しかし,php.ini に値の設定がない場合,dir1 -> dir2 のように移動すると,グ
ローバル変数が初期化されるチャンスがないため,そのままの値が入ったまま
となり,dir2 に dir1 の値が反映されてしまう,ということになるのだと思
います.
---
パッチを作って見ようかと思いましたが,PHP の extension のお作法を知ら
ないので,あきらめました.(^_^;)
# デバッガで追うのにあたって,いくつか英語の文書を斜めよみしましたけど,
# さすがに書けるまでは...
とりあえず script_encoding の場合について調べましたが,他の設定値でも,同
様な事が起きる可能性はありますね.
ちょっと結論のないような終わり方になりましたが,調べましたよー,という
事で.^^;
--
==============================================
(((( 加藤泰文
○-○ karma @ jazz.email.ne.jp
==============================================
(Web Page) http://www.ne.jp/asahi/ka/to/
==============================================
PHP-dev メーリングリストの案内