ラボ > PHP:通信絡み、HTML、Javascript絡み、サーバ:.htaccess、Javascript関連:form、HTML:form関連

html+js、php formでファイルアップロード前に容量チェックを行う

formからファイルをアップロードしたいけど、サーバに送る前に容量チェックをしたい

作成日:2021-11-08, 更新日:2022-02-08

JSのサンプル

▼任意のタイミングで容量チェックを行う

let chk_fileSize = function(elm){
  if(elm.val()){
    let file = elm.prop('files')[0];
    return file.size;
  }
  else {
    return 0;
  }
}

$(〇〇〇).on('click', 'input[type=submit]', function(){ // 送信する寸前
  let fileSize = chk_fileSize($('input[type=file]')); // 複数あるならループさせる・・・とか。
  if ( 〇〇〇 < fileSize ) {
    alert('アップロードできるのは、〇〇〇バイト以下のファイルです');
    $(this).val(''); // 内容をクリア
    return false;
  }
});

$(〇〇〇).on('change', 'input[type=file]', function(){ // ファイルを選択したとき
  let fileSize = chk_fileSize($(this));
  if ( 〇〇〇 < fileSize ) {
    alert('アップロードできるのは、〇〇〇バイト以下のファイルです');
    $(this).val(''); // 内容をクリア
  }
});

サーバ側の問題

サーバ側で受取るコトが出来るファイルサイズが決まっているので変更する

  • php.ini
  • .htaccess
  • httpd.conf
  • .user.ini
  • ini_set()

設定を変更する場合、上記のどれかを修正すればOK
ただし、設定したい項目によっては設定箇所に指定があったりする

ファイルのアップ時の容量をどうにかしたい

・「PHP_INI_ALL」は「ini_set()」もOK。
・「PHP_INI_PERDIR」は「ini_set()」はNG。

名称 変更可能 メモ
max_execution_time PHP_INI_ALL 処理の制限時間(秒)
memory_limit PHP_INI_ALL スクリプトが確保できる最大メモリ。post_max_sizeより小さいのはダメ
post_max_size PHP_INI_PERDIR POSTデータに許可される最大サイズ。upload_max_filesizeより大きくする
upload_max_filesize PHP_INI_PERDIR アップロードされるファイルの最大サイズ

「.htaccess」の記述

php_value max_execution_time 600
php_value memory_limit 128M
php_value post_max_size 256M
php_value upload_max_filesize 512M

サーバの設定で500エラーになることもある(※レンタルサーバだと設定方法についてどっかに記載があると思われる)

ini_set()で設定

無理。
※「post_max_size」「upload_max_filesize」は「PHP_INI_PERDIR」なので「ini_set()」が無効になる

▼こんな感じで設定できるって聞いたことがあるんだけど・・・昔は動いていたのかな・・・? それともサーバの設定で変更できるのかな?

ini_set('memory_limit', '128M');
ini_set('post_max_size', '256M');
ini_set('upload_max_filesize', '512M');

関連項目