pathinfo()関数で日本語のファイル名が扱えないの?
PHP5.3.10で作られたファイルを取り扱うシステムで、日本語ファイルが取り扱えない不具合が発生。
原因を調査すると、pathinfo()関数で取得したbasenameがおかしい。
たとえば、「日本語abc.txt」のようなファイル名は「abc.txt」として出力されてしまう。
先頭に日本語がある場合だけおかしくなり、「abc日本語.txt」のようなファイル名では問題ない。
どう考えてもpathinfo()の挙動がおかしいのだ。
ぐーぐる先生に聞いてみても、
おまえ、それPHPのバグだから。 PHP6が出るまで諦めろ!
的な内容ばかり見られる。
だが待て!
同じコードが他のサーバーでは問題なく動いているんだよ!
特定のサーバーだけが動かないんだよ!!
PHPの公式マニュアルの下のほうに、マルチバイト使用時に関する注意書きがさりげなくある。
PHP: pathinfo - Manual
ほうほう。ロケールとな。
試しに、現在のロケール情報を調べてみたら、動かないサーバーだけうまく取得できない!!
それを全て解決してくれた魔法の言葉があったので記しておく。
日本語を取り扱う環境で、サーバーの文字コードがUTF-8の場合。
まぁ、CentOSでの設定。
setlocale(LC_ALL, 'ja_JP.UTF-8');
この復活の呪文のおかげで、見事復活!!
ありがとう、setlocale関数。最高だよsetlocale関数。