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