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

2018/08/05PHPPHP

記事内に広告が含まれています。
スポンサーリンク

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

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

環境

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

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

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

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

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

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

// pathinfo日本語対応
setlocale(LC_ALL, 'ja_JP.UTF-8');

このおまじないで解決。

システムトラストでは一緒に働いていただける仲間を募集中です。
記事内に広告が含まれています。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ