Drupal6 + php5で日本語名のファイルがコンテンツに添付できない問題

Posted by koji.sasaki
印刷用ページ印刷用ページ

先日、お客様の前でDrupalのデモをしたところ日本語名のファイルがアップロードできない、、、すると「日本語だめなんですか? 写真とか全部日本語のファイル名で管理しているので、半角英数に変更するのは面倒なのでなんとかなりません?」といわれてしまいました。確か以前のバージョンでは日本語ファイル名も問題なくアップロードできていたと思うのですが、、、

基本的にwebアクセスするファイル名は半角英数のみを使用することは技術的な知識がある人からすると当たり前なのですが、一般ユーザーからすると「なんで日本語ファイル名じゃだめなの?」と感じるのも極々当たり前なのです。それでちょっと調べますということになったのですが、これが案外時間がかかってしまいました。

どうやら原因はphp5のバグらしく、basename()でパスに日本語が含まれていると正しく動かないようです。
NexTech : PHPのpathinfo、basename関数で日本語ファイル名がうまく取得できない。
を参考にさせていただき修正したのは includes/file.inc の 528行目

$file->filename = file_munge_filename(trim(basename($_FILES['files']['name'][$source]), '.'), $extensions);

をコメントアウトして以下のように変更しました。

// fix php5 basename() bug on mb file names
//$temp_array = end(mb_split("/",$_FILES['files']['name'][$source]));
$file->filename = file_munge_filename(trim(end(mb_split("/",$_FILES['files']['name'][$source])), '.'), $extensions);

これで日本語ファイル名でもアップロードできるようになりましたが、他のbasename()が使われている箇所も対応が必要かもしれません。

Trackback URL for this post:

http://blogs.liquidst.jp/trackback/18