Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP$\文件大小总问题_Php_Html_Forms - Fatal编程技术网

PHP$\文件大小总问题

PHP$\文件大小总问题,php,html,forms,Php,Html,Forms,我有一个HTML表单,它将表单值和文件上传到PHP进行处理。我想做的一项检查是获取上传的所有文件的总大小。如果size数组中的任何值都不为0,那么下面的代码可以正常工作,但是如果其中任何值都为0(当文件输入为空时会发生这种情况),那么出于某种原因,total总是输出为0 代码: if(!empty($_文件['attachment']){//如果有附件 $count=count($_文件['attachment']['name']); 如果($count>0){ 对于($i=0;$i209715

我有一个HTML表单,它将表单值和文件上传到PHP进行处理。我想做的一项检查是获取上传的所有文件的总大小。如果size数组中的任何值都不为0,那么下面的代码可以正常工作,但是如果其中任何值都为0(当文件输入为空时会发生这种情况),那么出于某种原因,total总是输出为0

代码:

if(!empty($_文件['attachment']){//如果有附件
$count=count($_文件['attachment']['name']);
如果($count>0){
对于($i=0;$i<$count;$i++){
如果(!empty($totalFileSize)){
$totalFileSize=0;
}
//总文件大小
如果($\u文件[“附件”][“大小”][$i]!=0){
$totalFileSize+=($_文件[“附件”][“大小”][$i]);
}
}
$message=$totalFileSize;
}
//检查
如果($totalFileSize>20971520){
$fileSizeError=1;
}
}
回声'

我不明白为什么在没有0的情况下for循环中的附加值可以正常工作,但在有0的情况下却不行

首先,如果要使用
+=
,则必须先初始化该变量,然后再执行第一个
+=

其次,在循环中有这一行,它将把
$totalFileSize
的值设置为零,如果该值存在并且大于0

$totalFileSize = 0; // init before using `+=`

if (!empty($_FILES['attachment'])) { //If there are attachments
    $count = count($_FILES['attachment']['name']);
    if ($count > 0) {
        for ($i = 0; $i < $count; $i ++) {
            //Total File Size
            if ($_FILES["attachment"]["size"][$i] != 0){
                $totalFileSize += ($_FILES["attachment"]["size"][$i]);
            }
        }
        $message = $totalFileSize;
    }
    //Checks
    if ($totalFileSize > 20971520){
        $fileSizeError = 1;
    }
}
因此,将代码更改为

$totalFileSize = 0; // init before using `+=`

if (!empty($_FILES['attachment'])) { //If there are attachments
    foreach( $_FILES['attachment']['size'] as $size){
        //add up the File Sizes
        $totalFileSize += $size;
    }
    $message = $totalFileSize;
    //Checks
    if ($totalFileSize > 20971520){
        $fileSizeError = 1;
    }
}
甚至

if (!empty($_FILES['attachment'])) { //If there are attachments
    if (array_sum($_FILES['attachment']['size']) > 20971520){
        $fileSizeError = 1;
    }
}
甚至

如果(!empty($totalFileSize)){$totalFileSize=0;}
-这有什么意义?在每个循环迭代中,如果它已经有一个非零值,您将把
$totalFileSize
重置回零。
如果($\u FILES[“attachment”][“size”][“size”[$i]!=0){$totalFileSize+=($\u FILES[“attachment”[“size”[$i]);}
-这似乎也毫无意义。如果要添加的值为0,则您在这里跳过了限制,以不“更改”您的总和。那么一个总和加上0会改变多少…?
$totalFileSize = 0; // init before using `+=`

if (!empty($_FILES['attachment'])) { //If there are attachments
    foreach( $_FILES['attachment']['size'] as $size){
        //add up the File Sizes
        $totalFileSize += $size;
    }
    $message = $totalFileSize;
    //Checks
    if ($totalFileSize > 20971520){
        $fileSizeError = 1;
    }
}
if (!empty($_FILES['attachment'])) { //If there are attachments
    $totalFileSize = array_sum($_FILES['attachment']['size']){
    //Checks
    if ($totalFileSize > 20971520){
        $fileSizeError = 1;
    }
}
if (!empty($_FILES['attachment'])) { //If there are attachments
    if (array_sum($_FILES['attachment']['size']) > 20971520){
        $fileSizeError = 1;
    }
}