カテゴリ: PHP
記事投稿日: 2014年3月3日
半角英数名のファイルのアップロードはまったく問題ありませんが、
日本語名が混じると、ファイル名が消え、拡張子だけが残ります。
「.gif」や、「.jpg」という状態です。
この不自然なファイル名が取得されるため、更新が反映されないなどの
問題を引き起こします。
PHP5の関数「basename」のバグです。
PHP6で解決されるということで、現在バグが放置状態、非推奨となっているようです。
アップロード処理で使用しているjQueryのプラグイン「jQuery File Upload 」に
この関数が潜んでおり、結果として、日本語名のファイル名が消えてしまう、
という現象を引き起こしていることが分かりました。
バグのある関数「basename」に代わる処理を作ることで対処できました。
// 対応前 $filename = basename($_FILES['upload_hoge']['name']); // 対応後 $filename = end(explode("/", $_FILES['upload_hoge']['name']));
海外製のソフトでは同様の問題があります
WordPressのプラグイン「ContactForm」や、CMSの「Drupal」でも
同様の現象が起きるようです。
「basename」関数については、日本語特有の問題のため、
プラグインの自動アップデートなどでは直らない可能性があり、要注意です。
コメントを残す