2016-01-10 2 views
-1

эй, я получаю ошибкуPHP загрузить файл сумма массив

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

'array_sum()' работает только с одномерными массивами –

+0

'array_sum()' будет работать, если вы имели несколько входов формы для нескольких файлов, так что вы бы для '' input type = "file" name = "file []" /> '. – Rasclatt

ответ

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

Является ли ваша проблема, array_sum ожидает массив , но вы отправляете его размер. Размер, вероятно, является целым числом. Попробуйте

array_sum($_FILES['file']) 

и посмотреть, есть ли у вас другая ошибка.

+3

Вероятно, вы не получите ошибку, но также не получите хороший результат, так как вы просто пытаетесь суммировать все свойства файла, такие как его имя, тип и т. Д. Поэтому этот ответ не очень помогает. – GolezTrol

0

Вы вызываете array_sum, передайте значение, которое не является массивом. Значение, которое вы передаете, это $_FILES['file']['size'], который не является массивом, а просто (целочисленным) размером файла «файл».

К сожалению, вы хотите суммировать размеры, но они вложены глубже в массив файлов. Сам массив файлов содержит массивы для каждого элемента, и каждый элемент представляет собой массив с ключами, которые содержат различные свойства одного файла. Функция может суммировать только элементы одного, одномерного массива, поэтому функция здесь не поможет.

Решить его с помощью петли вместо:

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

if ($size > $max_combined_size*1024) { 
    .. Do your stuff 
} 
Смежные вопросы