phpのbasenameはロケール次第で日本語が扱えない

はまったのでメモ

ファイル名をとれる関数 basename を使って

$path = "/var/www/upload/日本語ファイル.txt";
echo basename($path);
// .txt

日本語ファイル.txtが出てきて欲しいのに、日本語部分が消えてしまいました

公式マニュアルの出番です
http://php.net/manual/ja/function.basename.php

ロケールに依存するらしい..

いまのロケールを見てみます

echo setlocale(LC_ALL, 0);
// C

Apacheのロケール、Cを引き継いでるっぽいです

setlocale(LC_ALL, 'ja_JP.UTF-8');
$path = '/var/www/upload/日本語ファイル.txt';
echo basename($path);
//日本語ファイル.txt'

で取れました
Apacheの設定変えてもいいかもしれません

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください