scandir で日本語のディレクトリが取得できない

2018-08-05

サーバ上のディレクトリ、ファイル一覧を取得

今回は、サーバ上のディレクトリ、ファイル一覧を取得してブラウザ上からファイルの管理ができる仕組みを構築してみました。
作りは、至って単純。scandirをつかって取得した情報を一覧形式で出力するだけのものです。
リストの上位はディレクトリ、次にファイル一覧を出力させてみました。
しかし、いきなり問題が発生しました。

環境

PHP 7.1 CGI版
OS Linux
文字コード utf-8

問題:日本語ディレクトリが読めない

サーバ上に日本語ディレクトリを作って読んでみたところ
ディレクトリ名が取得できませんでした。
scandirで読み込んだディレクトリをpathinfoで読み込んだところ
[basename]が、見事に日本語部分のところだけ取得できず半角英数字の部分だけ取得できていました。

このような感じ
「ディレクトリ名123」-> 「123」

日本語ディレクトリを読み込む方法

サイトを調べていくと、basename関数はマルチバイト対応していないと書かれているサイトが多数見受けられます。
本当に読めないのか?と調べていくと解決方法はありました。
basenameで読み込むにはロケールの設定が必要であるようです。

このおまじないで解決。