php の mbstring
先日、上司から「こっちきて」とか呼ばれたので、何だろうと思って行ってみると、 blog が表示されなくて困っているとのこと。
URL を叩いてみると、確かに表示されない。じゃあということで、URL の後ろに index.php をつけてみると、問題なく表示される。
なんだ、 .htaccess の DirectoryIndex を設定すればいいだけか、 LPIC レベル 2 の勉強でさんざんやったよと思って以下のように記述した .htaccess をディレクトリに放り込んでやった。
- DirectoryIndex index.php
その後、画面は表示されるようになったのだが、 Word Press の管理画面に入ると .htaccess が以下のように書き換わってしまうことが判明。
- # BEGIN WordPress
- # END WordPress
このヤロウと思って、一個上の階層に .htaccess を作成してやった。
wordpress ディレクトリの外に .htaccess があるので、 Word Press はそのファイルを書き換えることができない。というか、しない。
これで問題は解決したかに思えたのだが、しばらくしてまた「こっちきて」と呼び出された。
またかよと思って行ってみると、今度は記事が投稿できないという症状。
おいおい、どうゆうことだよ。
このサーバの管理者権限は持っていないし、 Word Press の管理者権限も持ってないので、事象から原因を推測するしかない。
二人羽織 よろしく、もう一度上司に記事を投稿してもらう。タイトルが空白になり、本文も <P></P> とか、空タグだけになってしまっている。
オーソドックスに、設定画面をみてもらう。管理画面から設定の項目をちらほら。特にそれらしい設定項目は見当たらない。上司も、設定は変更してないという。
それを信じるなら、サーバの設定が変わったか、誰かが何かやって上位ディレクトリにある .htaccess あたりを変更してしまったかだろう。
とりあえず、設定の保存をしてもらったら、 Blog のタイトルが文字化けした。というより、入力した文字から、日本語の文字が消えて、半角英数字だけになった。
これって、日本語のエンコードとかの問題だよな、と思い、 phpinfo を作ってみた。
Directive | Local Value | Master Value |
---|---|---|
mbstring.http_input | auto | auto |
mbstring.http_output | SJIS | SJIS |
おいおい、なんで auto / SJIS になってんだ? auto はやめてくれよ。 pass にしといてくれよ。というか、前に pass にしたろ。誰か弄ったね? 父さんにもイジられたことないのに…
勝手に実験コーナー始めるなって、往々にしてオレに被害が来るんだから、コロシマスヨ?
やるなら適当なディレクトリ作ってそこで実験してね。
というわけで、 Word Press に干渉されないよう、一個だけ上位のディレクトリに、以下の内容で .htaccess を作成して、 OK 。
- DirectoryIndex index.php
- php_value mbstring.http_input pass
- php_value mbstring.http_output pass
そのディレクトリでの phpinfo は次のようになった。
Directive | Local Value | Master Value |
---|---|---|
mbstring.http_input | pass | auto |
mbstring.http_output | pass | SJIS |
それを見て分かったわけ。
.htaccess で変更できる php の設定
何故、 phpinfo に「Local Value」と「Master Value」の 2 つの値を持つ設定項目があるんだろうと、前から不思議に思っていたのだけど、今回のことで感覚的に理解した。 ( 理論的に、ではない )
mbstring や mysql 、 odbc 、 session など、値を 2 つ持つ設定項目は、 .htaccess で設定をいじれるってことね。
了解。