【问题标题】:php file upload array sumphp文件上传数组总和
【发布时间】:2016-01-10 23:18:30
【问题描述】:

嘿,我一直收到错误

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 
}
?> 

【问题讨论】:

  • array_sum() 仅适用于一维数组
  • 如果您有多个文件的多个表单输入,array_sum() 将起作用,因此您必须拥有&lt;input type="file" name="file[]" /&gt;

标签: javascript php upload directory


【解决方案1】:

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

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

使用循环来解决它:

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

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

【讨论】:

    【解决方案2】:
    array_sum($_FILES['file']['size'])
    

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

    array_sum($_FILES['file'])
    

    看看你是否得到不同的错误。

    【讨论】:

    • 你可能不会得到错误,但也不会得到好的结果,因为你只是想总结文件的所有属性,比如它的名称、类型等。所以这个答案不是很有帮助。
    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2014-04-07
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多