ラボ > PHP:ファイル関連、FuelPHP:エラー絡み、OS:Linux

FuelPHP+Xampp or CentOS 日本語ファイル名を取得すると日本語が消える

Localeの「ja-JP」と「ja_JP」が問題っぽい

作成日:2020-11-26, 更新日:2023-04-06

経緯

基本処理

1.「ファイル:foo.jpg」をup
2.「1」のファイルを「hoge.jpg」にリネーム
ということをしていた。

日本語のファイル名でエラー

日本語のファイル名の場合、エラーにならない場合もあるが、エラーになる場合もあった。

1.日本語を含むファイル名「ほげほげ1.jpg」のファイルをup。
2.「1」のファイルを「hoge1.jpg」にリネーム
3.エラーになったり、ならなかったり。

エラーログの確認

・「1」のファイル名を取得すると「ほげほげ1.jpg」ではなく「1.jpg」となっている。
→「1.jpg」を「hoge1.jpg」にリネームしようとするけど「1.jpg」が見つからない・・・でエラー。

原因

Localeの設定が問題っぽい。

▼FuelPHP側の「app/config/config.php」の中
・Localeを「ja-JP」ではなく「ja_JP」に変更

「ja-JP」にしていた理由

1.Xamppで作業をしていたときに「en_US」が無いってWARNINGが出てくる
2.色々と調べて「app/config/config.php」の「Locale」を「en_US」を「ja_JP」に修正
3.「ja_JP」が無いってWARNINGが出てくる
4.Windows側の「C:\Windows\System32\driver」の下にあるのは「ja-JP」なので、「app/config/config.php」の「Locale」を「ja_JP」を「ja-JP」に修正
5.CentOSのサーバにそのままup
6.CentOSの方は「ja-JP」が無く「ja_JP」にしなくちゃいけなかったらしい

「ja-JP」と「ja_JP」について

RFC 1766に従っている「ja-JP」が正しいけどUNIXやJavaなどでは「ja_JP」で表記され、それがそのまま慣習的に使われているっぽい
※参照:ja_JP.eucJPのようなロケールの書き方についての解説

Windows側はRFC 1766に従い、CentOS側は従っていない・・・ってのが問題