php文件上传数组总和

时间:2016-01-10 23:18:31

标签: javascript php upload directory

嘿,我一直收到错误

  

array_sum()期望参数1为数组

有谁知道我做错了什么?万分感谢。我想我可能在文件夹名称或其他地方的错误位置有斜线?我有一个下拉菜单给我文件夹的价值,我通过javascript提交表单,如下:

document.getElementById("form").submit();
alert("form submitted");

PHP

<?php
$type = $_POST['Folder'];
$folder = "uploaded/$type";
$allow_types=array("aiff","mp3","wav");
$max_combined_size="10000";

If($_POST['submit']==true) {

    //Tally the size of all the files uploaded, check if it's over the ammount. 
    If(array_sum($_FILES['file']['size']) > $max_combined_size*1024) {

        echo "Combined file size is to large";

        / Loop though, verify and upload files.
    } Else {
        // Loop through all the files.
        For($i=0; $i <= $file_uploads-1; $i++) {
            //Get the file extension
            $file_ext[$i] = strtolower(pathinfo($_FILES['file']['name'][$i], PATHINFO_EXTENSION));
            // If the file is a file
            If($_FILES['file']['name'][$i]) {
                // Randomize file names

                $file_name[$i]=1;
                while(1){
                    $file_name[$i] =$file_name[$i]+1;
                    if exists("$folder/$file_name[$i].$file_ext[$i]")){ 
                        break;
                    }
                }

                // Check for blank file name
                If(str_replace(" ", "", $file_name[$i])=="") {      
                    echo " Blank file name detected";
                } ElseIf(!in_array($file_ext[$i], $allow_types)) {
                    echo "Invalide file type";
                } Elseif(file_exists($folder.$file_name[$i].".".$file_ext[$i])) {

                    echo "File already exists";

                } Else {

                    If(move_uploaded_file($_FILES['file']['tmp_name'][$i],$folder.$file_name[$i].".".$file_ext[$i])) {
                        echo "success!";    
                    } Else {
                        echo "upload failure";
                    }
                }
            } // If Files
        } // For
    } // Else Total Size 
}
?> 

2 个答案:

答案 0 :(得分:0)

你调用array_sum,传入一个不是数组的值。您传递的值是$_FILES['file']['size'],它不是数组,而只是文件'file'的(整数)大小。

不幸的是,您想要对大小求和,但它们嵌套在文件数组中。 files数组本身包含每个项目的数组,每个项目都是一个数组,其中的键包含一个文件的各种属性。该函数只能对单个一维数组的项进行求和,因此这里的函数不会有多大帮助。

使用循环解决它:

$size = 0;
foreach ($_FILES as $file) {
  $size += $file['size'];
}

if ($size > $max_combined_size*1024) {
  .. Do your stuff
}

答案 1 :(得分:-2)

array_sum($_FILES['file']['size'])

你的问题是,array_sum是期待一个数组,但你发送的是一个大小。大小可能是整数。试试

array_sum($_FILES['file'])

并查看是否有其他错误。