[PHP-users 3365] mbstringの設定を.htaccessで変更するときの記述方法について

Ryuzi Kambe php-users@php.gr.jp
Tue, 06 Nov 2001 16:28:47 +0900


すこしわからないことがあり、MLにポストしてみようと
思ったのですが、調べている途中で解決してしまいました。

書きかけがもったいなかったので、自問自答形式でポストします。
ご存じの方にはお目触りだと思いますが、未来の自分もまた
陥りそうなところなので、投稿することご容赦下さい。

#結びは模範解答的にしてみました(笑)

--
Ryuzi Kambe
kambe@mc.kcom.ne.jp

-------------------------------------------------------------------
[Q.] mbstringの設定を.htaccessで変更するときの記述方法は?
-------------------------------------------------------------------

私RedHat Linux 6.2上で、PHP 4.0.6をapacheモジュールで使用しています。
mbsttingの設定も行っており、現在のphp.iniの設定(後述)では、
望むとおりの出力ができています。

しかし、この設定では、HTTP出力文字コードがEUC-JPなので、
大半の携帯電話や一部の低機能なブラウザでは表示させられません
そこで、それら向けのコンテンツをおくための、あるディレクトリ
以下のみShift_JISで出力させたいと考え、その方法を調べました。

PHPマニュアル:XLVIマルチバイト文字列関数
http://search.net-newbie.com/php/ref.mbstring.html

によると、「HTTP入出力」の項目で、
「PHPをApacheモジュールで使用する場合、php.iniの設定を 
 httpd.confにより仮想ホスト単位で、または .htaccessにより
 ディレクトリ単位で上書きすることが可能です。」

とあります。そこでそのディレクトリに置いた.htaccessの内容に、
php.iniで設定したように

mbstring.http_output = SJIS

とだけ記述しました。

すると、apacheのエラーログに以下のような行が出ました。

[Tue Nov  6 15:45:17 2001] [alert] [client (IPADDR)] /(PATH-TO-DIR)/.htaccess: 
Invalid command 'mbstring.http_out put', perhaps mis-spelled or defined
by a module not included in the server configuration

認証の際には
http://www.big.or.jp/~mio/ga/cgi/cgiman/cgiacce.htm
などにあるように、
変数と値の間に = がないので、

mbstring.http_output SJIS

ともしてみましたが、同様のエラーログが出ます。
.htaccessでPHPの設定値を適切に設定するにはどうしたらいいでしょうか。

[ 参考:現在のphp.iniのmbtsring部分の定義 ]
output_buffering = On
output_handler = mb_output_handler;

mbstring.detect_order = AUTO
mbstring.internal_encoding = EUC-JP
mbstring.http_output = EUC-JP
mbstring.http_input = AUTO

-------------------------------------------------------------------
[A.]PHPに関連するApacheディレクティブの書式を確認しましょう。
-------------------------------------------------------------------

設定ファイルの移行->Apache 設定ファイル
http://search.net-newbie.com/php/migration.html
を見て下さい。

上のURLから引用
-------------------------------------------------------------------
PHP 4.0 では、PHPに関連するApacheディレクティブは以下の4つのみで。 

 php_value [PHPディレクティブ名] [value]
 php_flag [PHPディレクティブ名] [On|Off]
 php_admin_value [PHPディレクティブ名] [value]
 php_admin_flag [PHPディレクティブ名] [On|Off]

-------------------------------------------------------------------
引用ここまで

phpに関するApacheディレクティブの書式は、ここで例示されているように
なります。

すなわち、mbstring.http_outputの値を設定したいときには、

mbstring.http_output = SJIS
や
mbstring.http_output SJIS

ではなく、

php_value mbstring.http_output SJIS

としなければなりません。

php_admin_valueは、全てのPHPディレクティブの値を修正可能ですが、
(セーフモードなど)mbstringはphp_valueで設定可能です。

.htacessと組み合わせることで、ディレクトリごとに柔軟な設定が
可能になります。必要に応じて有効に活用しましょう。