EC-CUBE4 商品画像のアップ(登録)ができないときの対処方法

EC-CUBE4の商品登録の際の画像のアップロードに関して、ちょっと落とし穴があったので、紹介します。結論から言うと拡張子の問題でした。

先日、EC-CUBE4でのショッピングサイト制作案件のお客様から、画像がアップできないとお問い合わせをいただきました。EC-CUBE4では以前のバージョンのように自動リサイズ機能がないため、アップした画像がそのまま反映されてしまうという仕様のようです。そんなわけで、納品の際のレクチャー口を酸っぱく、画像をあげる時は絶対リサイズしてくださいとつたえていました。あれ程言ったのに、さてはリサイズせずに画像アップしてるなと思い、やんわりと諭そうとしたら、言われた通りリサイズしてるとの主張。実際にアップできない画像を送ってもらったら、ちゃんとリサイズされてました。ちゃんとやってるじゃん、と思いながらアップすると、以下のエラーが、、

サイトからのメッセージ「アップロードに失敗しました」

何でだろうとさっそくGoogle先生に聞いたら、「.htaccess」に関する内容がちらほら見かけました。実はEC-CUBE4の最上位のディレクトリにはこんな記述があり、

# デフォルトテンプレートの状態で 2M 以上となるため
<IfModule mod_php7.c>
    php_value upload_max_filesize 5M
</IfModule>

これによって、5M以上のサイズの画像はアップできないようになっている。先ほども記述したようにEC-CUBE4ではサーバーへのアップ時の自動画像リサイズ機能は実装されてないので、逆にこれでアラートあげてくれないととんでもないことになってしまう。ほんとんどのユーザーがスマホで見てる時代なので、個人的には1Mで制限をかけたいぐらい。

今回のケースはちゃんとリサイズされた5M以下の画像だったので、「.htaccess」は問題ではない。そうすると、これまで経験から察するに拡張子の問題ということになるかなぁと。

お客さんからもらった画像を見ると拡張子は「.JPG」と大文字になってました。お客さんに確認したら最近、ソニーのカメラを買って、それで撮り始めたとのこと。ソニーのサイバーショットを買ったらしいが、どうやらそのカメラから出力される画像の拡張子が「.JPG」で、今までと違っていました。

EC-CUBE4 画像拡張子「.JPG」をアップさせる方法

さすがにお客さんにいちいちリネームしてもらうのは酷なので、拡張子「.JPG」でもアップできるように修正。方法は、以下ファイルのファイルを修正します。
修正ファイル:/src/Eccube/Controller/Admin/Product/ProductController.php

▼変更前
316行目:$allowExtensions = ['gif', 'jpg', 'jpeg', 'png'];

▼変更後
316行目:$allowExtensions = ['gif', 'jpg', 'JPG', 'jpeg', 'png'];

これで無事に拡張子「.JPG」の画像もアップできるようになりました。