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関数。