サーバから日本語を含むファイル名が正しく取得できない


先頭の日本語だけ消える?

sample.php
// (1)「file」というディレクトリ内のファイル一覧を配列形式で取得(「./file/ファイル名.jpg」というパス情報が取れる)
// 拡張子を指定する時はglob("./file/*.jpg")のようにする
$fileArray = glob("./file/*");

// (2)(1)で取得したファイル名の配列を1つずつ処理する
foreach($fileArray as $filepath) {
  // basename()でファイル名のみ取得する。
  $file_name = basename($filepath);
}

これでファイル名を取得できるはずなのですが、
ファイル名が全て日本語文字の場合は全て消えて、一部日本語文字の場合は先頭の日本語文字が消えてしまいます。
たとえば
「ファイルsample名前.pdf」→「sample名前.pdf」
「ファイル名.pdf」→「.pdf」
というようになってしまう。
(ちなみにPHPのバージョンは7.1(CGI版)/サーバはheteml)

原因はロケールの設定に依存するため

php.iniでmbstring関連の設定をいじってみたのですが全くの無意味でした。
そして見つけたのが下記の記事
fgetcsv関数を文字化け対応 setlocaleの文字コード指定

fgetcsv関数に関しての記事でしたが、症状は同じ…
ということでさっきのプログラムの頭にロケールの設定を足してみました。
(さっきのコメントは邪魔なので消しました)

sample.php
// ロケールの設定
setlocale(LC_ALL, 'ja_JP.UTF-8');

$fileArray = glob("./file/*");

foreach($fileArray as $filepath) {
  $file_name = basename($filepath);
}

結果は…

わーい!取得できた!よかった!