Запретить загрузку перед POST, если файл слишком большой с PHP - PullRequest
0 голосов
/ 11 июля 2020

Этот сценарий предназначен для загрузки файла изображения размером менее 2 МБ. Я хочу проверить размер файла перед его загрузкой. Поскольку то, что я пробовал, показывает это предупреждение, если размер загружаемого файла превышает 20 МБ:

Предупреждение: длина содержимого POST 20402819 байтов превышает ограничение в 8388608 байтов в Неизвестном в строке 0

Я не хочу изменять файл php .ini для увеличения максимального размера загружаемого файла ... Я не хочу загружать больше 2 МБ.

Пожалуйста помощь ....

if(isset($_FILES['image'])){
  $errors= array();
  $file_name = $_FILES['image']['name'];
  $file_size =$_FILES['image']['size'];
  $file_tmp =$_FILES['image']['tmp_name'];
  $file_type=$_FILES['image']['type'];
  $file_ext= explode('.',$_FILES['image']['name']);
  $file_ext= $file_ext[count($file_ext)-1];
  $file_ext= strtolower(end(explode('.',$_FILES['image']['name'])));
  
  $extensions= array("jpeg","jpg","png");
  
  if(in_array($file_ext,$extensions)=== false){
     $errors[]="extension not allowed, please choose a JPEG or PNG file.";
  }
  
  if($file_size > 2097152){
    $errors[] = 'File size must not exceed 2 MB.';
  }
  if(!empty($filename)){
    $errors[] = "Please choose a file before you upload.";
  }
  
  if(empty($errors)==true){
    move_uploaded_file($file_tmp,"uploads/" . $file_name);
    $file_location = "uploads/" . $file_name;
    submitFile($file_location);
  }else{
     print_r($errors);
  }

}

1 Ответ

0 голосов
/ 11 июля 2020

Не уверен, какой (если есть) JS фреймворк вы используете, но jQuery может это сделать. Вам нужно переопределить обработчик события отправки на стороне клиента и сделать следующее:

<input type="file" id="file-select" />
//you might need additional properties on ^
const upload_limit = 2; //MB
jQuery("#file-select").on('change', function() {
    const size = this.files[0].size / 1024 / 1024;
    if (size < upload_limit) { return true; }
    else { alert("File size is " + size + " MB, please select a smaller file."); return false;}
}

Это всего лишь пример, на самом деле лучше добавить функцию как часть события отправки и предотвратить отправка, если результат функции ложный (и / или другие ваши проверки).

...