服务器端文件验证

时间:2017-08-21 11:17:13

标签: php html

我试图通过表单将文件上传到服务器:

<form action="send_valid.php" method="POST" enctype= "multipart/form-data">
        <br>
        <input type="file" name="pdf" id="pdf" accept="application/pdf"/>
        <input type="hidden" name="MAX_FILE_SIZE" value="10000000"/>
        <input type="submit" value="Wyślij">
    </form>  

我想让用户只发送最大尺寸为10Mb pdf文件

我上传的php配置是:

file_uploads = On  
upload_tmp_dir = "E:\Xampp\tmp"  
upload_max_filesize = 11M  
max_file_uploads = 20  
post_max_size = 12M

要检查文件大小,我使用:

if($_SERVER["REQUEST_METHOD"] == "POST"){
  var_dump($_FILES);
  if(extract($_FILES)){
    if($pdf['size']>10000000){
      echo "File size is too large!";
    }
  }

现在,当文件太大时,我想用 echo 向用户显示错误(现在)。如果它低于10Mb,它工作正常(即使上面的代码在我将大小更改为1Mb并且文件更大时它将显示 echo ),但对于10Mb及以上的文件,它会产生该错误:

Warning: POST Content-Length of 11450416 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
array(0) { } 

我不知道为什么它显示超过 8Mb 因为在配置中我无法在任何地方找到8Mb。

哪里可以出问题?有没有办法捕获超出配置设置的上传,以便不向用户显示php服务器错误?

如果我想进行文件验证上面的方法并检查文件扩展名为for examle:

$ext = pathinfo($_POST['pdf'], PATHINFO_EXTENSION);

够了吗?任何有关文件验证的见解都会非常有用。

3 个答案:

答案 0 :(得分:1)

可能这个

ini_set('post_max_size', '512M');
ini_set('upload_max_filesize', '512M');

将512改为任何你想要的。

答案 1 :(得分:0)

将此代码放在move_uploaded_file函数

之前
 if($_FILES['pdf']['size']>10000000) {
        exit("File size is too large!");
    }

由于

答案 2 :(得分:0)

更新php配置文件中post_max_sizeupload_max_filesize的值。

请注意,这些值以字节为单位。

参考