[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 メーリングリストの案内