先頭の日本語だけ消える?
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);
}
結果は…
わーい!取得できた!よかった!