如果 PHP 文件太大,防止在 POST 之前上传

问题描述 投票:0回答:2

此脚本用于上传图片文件,小于2MB。我想在上传文件之前检查文件大小。因为我尝试的是显示此警告,如果上传文件大小超过 20MB:

警告:20402819 字节的 POST 内容长度超出了第 0 行未知中 8388608 字节的限制

我不想更改 php.ini 文件来增加最大上传文件大小...我不想上传超过 2MB。

请帮忙....

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);
  }

}

php post file-upload
2个回答
0
投票

不确定您正在使用什么(如果有)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;}
}

这只是一个示例,实际上最好将函数添加为提交事件的一部分,并在函数的输出为 false(和/或您的其他验证)时阻止提交。


0
投票

据我了解,您必须在

php.ini
文件中设置一个条目:

https://www.php.net/manual/en/ini.core.php#ini.post-max-size

JavaScript 验证始终可以被绕过,因为任何人都可以制作自己的提交表单,并直接从那里访问您的网页。

© www.soinside.com 2019 - 2024. All rights reserved.