基本的には問題なく処理できているはずのアップロード処理が、一部のファイルで不具合発生していたので、解決までの流れをメモしておきます。
解決策
以下の記述を取り急ぎ追加し、問題解消を確認しました。
- mb_internal_encoding(“UTF-8”); を追加
- setlocale(LC_CTYPE, ‘Japanese_Japan.932’);
- basename() を別の処理に変更
発生した問題について
半角全角が混ざっているファイル名の場合(例:2020_ファイル名.zip)は問題なくアップロードできている。
↓
ファイル名が以下の条件のファイルでアップロードが確認できない。
- 墨カッコ(【】←これ)が先頭にある
- ファイル名が日本語のみ
↓
FTPでアップロード先ディレクトリを確認したところ、「.pdf」というファイルがアップロードされていることを確認。
↓
上記ファイルを確認し、目的のファイルであることを確認。
↓
同時にDBへファイルリストを登録しているが、こちらは正しく登録されていた。
原因について
情報を検索したところ、いくつかの解決策を発見できました。
mb_internal_encodingを指定する
なんで指定してなかったんでしょうね……orz
とりあえずこれだけでは解決しませんでしたが、削除した場合の検証をする(精神的)余裕がないので残しておきました。
setlocaleを指定する
逆に問題発生の原因にもなりえるようですが、とりあえず記述しておきました。
削除した場合の(略)
basenameの処理を別処理に置換
basenameの部分を以下の処理に変更しました。
end(explode("/", $_FILES['attach']['name']))
取得したファイル名を「/」で分割し、生成された配列の最後=ファイル名を取得しています。
とりあえず上記の対策で問題解決しました。
文字コード設定忘れはちょっと情けないですが…
basenameのバグ、解消している説は嘘だったのでしょうか…?