【问题标题】:How to get total size of multiple files php如何获取多个文件php的总大小
【发布时间】:2018-08-17 08:46:40
【问题描述】:


我正在尝试使用单个输入上传多个文件,并且我想将所有文件的总大小限制为小于 100 MB。我该怎么办?
这是我的代码:

<?php
if(isset($_POST['submit'])){
    if(count($_FILES['upload']['name']) > 0){
        for($i=0; $i<count($_FILES['upload']['name']); $i++) {
           $fileName = $_FILES['upload']['name'][$i];
           $fileExt = strtolower(pathinfo($_FILES['upload']['name'][$i],PATHINFO_EXTENSION));
           $maxFileSize = 100 * 1024 * 1024 /* 100MB */;
           if(empty($fileName)) {
             echo 'Please select photos to upload!';
           } else if(!in_array( $fileExt, array('jpg', 'jpeg', 'png', 'gif', 'bmp'))) {
             echo 'Only photos, videos and audios allowed. If you have one or more files that is not in our <a href="#">supported extensions</a> directory, please remove it!';
           } else if($_FILES['upload']['size'][$i]>$maxFileSize) {
             echo 'Your file\s exceed the limit of 100MB capacity';
           } else {
             echo "Uploaded";
           }
        }
    }
}
?>

<form action="" enctype="multipart/form-data" method="post">
  <div>
       <label for='upload'>Add Attachments:</label>
       <input id='upload' name="upload[]" type="file" multiple="multiple" />
   </div>

   <p><input type="submit" name="submit" value="Submit"></p>
 </form>

似乎我无法获得所有文件大小的总和。我怎样才能做到这一点? 提前致谢!

【问题讨论】:

  • 您可以使用配置将最大帖子大小设置为 100Mb。 php.net/manual/ini.core.php#ini.post-max-size
  • 不...我想要所有这些尺寸的总和。因为它是一个数组,所以它返回不同文件的大小。
  • 另外请注意,根据文件扩展名检查文件类型是不安全的。最好使用 fileinfo :php.net/manual/book.fileinfo.php
  • 这就是 post_max_size does :它限制了整个发布请求的大小,因此如果您将限制设置为 100M,您将能够上传一个 100Mb 文件或 2 个 @987654327 @ 文件但上传 2 个 60Mb 文件会失败,因为这两个大小的总和大于 post_max_size
  • 我尝试了所有答案,但没有一个有效..你能告诉我上传多个文件的其他方式

标签: php html file upload


【解决方案1】:

如果你只是想在你的代码中获取所有上传文件的大小,你可以使用array_sum(),不需要使用循环。

$totalFileSize = array_sum($_FILES['upload']['size']);

这将为您提供所有文件的大小(以字节为单位)。然后您可以将其与您的最大尺寸进行比较:

$maxFileSize = 100 * 1024 * 1024 /* 100MB */;
if ($totalFileSize > $maxFileSize) {
    echo 'Your files exceed the limit of 100MB capacity';
}

根据您的代码,这里是带有array_sum 的完整代码,用于获取总文件大小

<?php
if (isset($_POST['submit'])) {
    if (count($_FILES['upload']['name']) > 0) {
        // compute the total size of the uploaded files
        $totalFileSize = array_sum($_FILES['upload']['size']);
        echo 'upload size : ' . $totalFileSize . ' bytes';
        $maxFileSize = 100 * 1024 * 1024;
        // check if the upload size is less than the max allowed
        if ($totalFileSize > $maxFileSize) {
            echo 'Your files exceed the limit of 100MB capacity';
        } else {
            // upload size is OK, process files
            for ($i = 0; $i < count($_FILES['upload']['name']); $i++) {
                $fileName = $_FILES['upload']['name'][$i];
                $fileExt = strtolower(pathinfo($_FILES['upload']['name'][$i], PATHINFO_EXTENSION));
                if (empty($fileName)) {
                    echo 'Please select photos to upload!';
                } else {
                    if (!in_array($fileExt, ['jpg', 'jpeg', 'png', 'gif', 'bmp'])) {
                        echo 'Only photos, videos and audios allowed. If you have one or more files that is not in our <a href="#">supported extensions</a> directory, please remove it!';
                    } else {
                        echo "Uploaded";
                    }
                }
            }
        }
    }
}
?>

<form action="" enctype="multipart/form-data" method="post">
    <div>
        <label for='upload'>Add Attachments:</label>
        <input id='upload' name="upload[]" type="file" multiple="multiple"/>
    </div>

    <p><input type="submit" name="submit" value="Submit"></p>
</form>

【讨论】:

    【解决方案2】:

    在循环内使用变量来计算它。我在下面放了 $total_file_size 变量来执行此操作。

    <?php
    if(isset($_POST['submit'])){
        if(count($_FILES['upload']['name']) > 0){
    
        $total_file_size = 0;
    
        for($i=0; $i<count($_FILES['upload']['name']); $i++) {
    
           $total_file_size += $_FILES['upload']['size'][$i];
    
           $fileName = $_FILES['upload']['name'][$i];
           $fileExt = strtolower(pathinfo($_FILES['upload']['name'][$i],PATHINFO_EXTENSION));
           $maxFileSize = 100 * 1024 * 1024 /* 100MB */;
           if(empty($fileName)) {
             echo 'Please select photos to upload!';
           } else if(!in_array( $fileExt, array('jpg', 'jpeg', 'png', 'gif', 'bmp'))) {
             echo 'Only photos, videos and audios allowed. If you have one or more files that is not in our <a href="#">supported extensions</a> directory, please remove it!';
           } else if($_FILES['upload']['size'][$i]>$maxFileSize) {
             echo 'Your file\s exceed the limit of 100MB capacity';
           } else {
             echo "Uploaded";
           }
        }
        }
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      相关资源
      最近更新 更多