6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-05-21

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

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);
}

結果は…

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

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?