EC-CUBEで商品画像が多すぎてアップ時にmax_file_uploads制限に引っかかってしまった際のたったひとつの冴えたやり方

画像アップロード点数の制限がPHP側にある

EC-CUBEの商品に登録できる画像点数は、カスタムすればいくらでも増やせます。
ところが、商品画像をアップロードする際、画面遷移せずに「アップロード」ボタンでその場で画像がアップロードできるのですが、画像点数を増やし過ぎるとPHPのmax_file_uploads制限にひっかかり、アップロードエラーになってしまうという問題に出くわします。PHP設定を直せればいいのですが、できない場合もあります。
さて、どうしましょう。

でも、そもそも、一斉にアップロードしてるわけじゃなく「アップロードボタン」を押して、1つ1つアップしてるんだから、max_file_uploads制限にひっかからないで欲しいわけです。

そんな時にJS一発で回避できるスマートな方法を編み出したので、メモ。

やりかた

EC-CUBEの管理画面を構成しているテンプレートファイルの一部を修正します。

        <!--{/if}-->
        <input type="file" name="<!--{$key}-->" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->"/>
        <a class="btn-normal" href="javascript:;" name="btn" onclick="selectAll('category_id'); fnModeSubmit('upload_image', 'image_key', '<!--{$key}-->'); return false;">アップロード</a>
    </td>
</tr>

上記のハイライトされている行を以下の様に修正↓

        <!--{/if}-->
        <input type="file" name="<!--{$key}-->" size="40" style="<!--{$arrErr[$key]|sfGetErrorColor}-->"/>
        <a class="btn-normal" href="javascript:;" name="btn" onclick="jQuery('input[type=file]').each(function(){if(jQuery(this).attr('name')!='<!--{$key}-->'){jQuery(this).attr('disabled','disabled')}}); selectAll('category_id'); fnModeSubmit('upload_image', 'image_key', '<!--{$key}-->'); return false;">アップロード</a>
    </td>
</tr>

384行目のボタンも同じなので、同様に修正します。
これだけで、普通に画像アップロードが出来るようになります。素敵!

実際に何が行われているかというと、アップロードボタンを押した瞬間に、関係ない<intput type="file">をdisabledにして、一度にPOSTする画像データを該当のinputのみにしてしまう、というトリックです。

・・ゴリ押しとか言わない。

確認したバージョン

  • EC-CUBE 2.12.1