[PHP-users 33856] Re: .htaccessのmbstring系の設定がディレクトリをまたいで他のphpに反映されてしまう現象について

kurt emperor.kurt @ gmail.com
2008年 7月 17日 (木) 01:32:14 JST


kurtです。

みなさん、返事がおそくなり申し訳ございません。
追加情報をいろいろといただきありがとうございます。

取り急ぎ北條さんの

> autoで指定したいということであれば,fedora用にRemi女史が作成された
5.2.6のrpmがあったような気がするので,そちらで動作確認をされてみてはいか
がでしょうか?
>
See also> http://blog.famillecollet.com/post/2008/05/07/php-526-1

を試してみました。Remi女史(初めて知りました)のrpm

php-common-5.2.6-1.el5.remi.i386.rpm
php-5.2.6-1.el5.remi.i386.rpm
php-mbstring-5.2.6-1.el5.remi.i386.rpm
php-cli-5.2.6-1.el5.remi.i386.rpm

↑をインストールしました。phpinfoのmbstring関係の設定も前回と同じにして
います。
(ただし--enable-zend-multibyteはconfigureで指定されていないため、
mbstring.scrpit_encodingは表示されてない)

--enable-zend-multibyteはconfigureで指定されていないため、
mbstring.scrpit_encodingは使えないので、同じくno valueになっている
mbstring.substitute_characterで同じようなことを試してみました。

dir1/test.php(ソースはUTF-8で記述。文字コードをEUC-JPにして出力)
-------------------------------------------------------------
<?php
header("Content-type: text/plain; charset=EUC-JP");
$str = "[はしご高]橋"; # 意図的に文字コード変換で失敗する文字をいれる
print mb_convert_encoding($str, "EUC-JP", "UTF-8");
?>
-------------------------------------------------------------

を作成し、dir1/.htaccessに

php_value mbstring.substitute_character 12307

を設定します。次にdir2/test.phpをdir1/test.phpと同じ内容で設置します。
(もちろんdir2/ 以下には.htaccessはなし)

ブラウザからdir1/test.phpにアクセス時は「〓橋」とeucで表示されます
(.htaccessでmbstring.substitute_characterで文字コード変換で失敗時の挙動
を変えているため)

次にdir2/test.phpにアクセスすると「?橋」と表示されるはずなのですが
(mbstring.substitute_characterの挙動はかえていないため)何回かアクセス
すると「〓橋」と表示されます。
と5.2.6でもやはりリクエストごとに初期化されていないような動きです。

※例によって、一回アクセスしただけでは、発生するとも限らないので、
何回か更新すると発生します。apacheの子プロセスの数を1個しか立ち上がら
ないようにする(StartServers, MinSpareServers, MaxSpareServers,
MaxClientあたりをとりあえず調整)と、かならず発生することから、
発生しない場合はまだ.htaccessの影響を受けていない子プロセス(.htaccessの
ある領域のPHPにリクエストが来たときに、そのリクエストをうけなかった子プ
ロセスとでもいいんですかねえ・・説明がちょっと難しいのですが)にあたった
ときだと思います。
こちらの環境ではデフォルトのapacheの設定だと8個子プロセスが立ち上がっていますが、
何回もdir1/test.phpにアクセスしてから、dir2/test.phpにアクセスすると
.htaccessの影響をうける頻度があがります。(そのうち絶対に発生するように
なる)

> php.iniで「auto」
> と設定した場合に初期化されない件は 5.2.6
>で解消されているようですが、php.iniで設定されていない(no value)場合はまだ対応されていないみたいですね。

結論からいうとまだ対応はされていないということですかね・・・

とりあえず他のみなさんからの意見もいろいろ試してみます


On Wed, 16 Jul 2008 14:15:14 +0900
van <vanxx2 @ gmail.com> wrote:

> php.iniで「auto」と設定した場合に初期化されない件は 5.2.6
> で解消されているようですが、php.iniで設定されていない(no value)場合はまだ対応されていないみたいですね。
> 
> --
> van <vanxx2 @ gmail.com>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3

-- 
kurt <emperor.kurt @ gmail.com>



PHP-users メーリングリストの案内