2014-09-09 5 views
0

У меня есть некоторый критический PHP-код. И у меня возникла проблема с этим.Недопустимый аргумент, предоставленный для foreach(), при загрузке изображения

Некоторые фотографии, которые я могу загрузить, а некоторые не могут. Я не знаю почему.

Когда я не могу загрузить pictuer, он показывает сообщение об ошибке:

Warning: Invalid argument supplied for foreach() in... 

Я не знаю, почему, нужна помощь

PHP

<?php 
session_start(); 
$valid_formats = array("jpg", "png", "gif", "JPG", "PNG", "GIF"); 
$max_file_size = 1024*3000; //3 MB 
$path = "uploads/"; // Upload directory 
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){ 
    // Loop $_FILES to exeicute all files 
    foreach ($_FILES['files']['name'] as $f => $name) {  
     if ($_FILES['files']['error'][$f] == 4) { 
      continue; // Skip file if any error found 
     }   
     if ($_FILES['files']['error'][$f] == 0) {    
      if ($_FILES['files']['size'][$f] > $max_file_size) { 
       $message[] = "$name is too large!."; 
       continue; // Skip large files 
      } 
      elseif(! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats)){ 
       $message[] = "$name is not a valid format"; 
       continue; // Skip invalid file formats 
      } 
      else{ // No error found! Move uploaded files 
       $kaboom = explode(".",$name); 
       $fileExt = end($kaboom); 
       $target_file = "uploads/$name"; 
       $thumbnail = "uploads/thumb_$name"; 

       $image_info = getimagesize($_FILES['files']['tmp_name'][$f]); 
       $image_width = $image_info[0]; 
       $image_height = $image_info[1]; 

       $canvas = imagecreatetruecolor('1000', '800'); 
       $current_image = imagecreatefromjpeg($_FILES['files']['tmp_name'][$f]); 
       imagecopy($canvas, $current_image, 0, 0, $width/2, $height/2, '1000', '800'); 
       imagejpeg($canvas, $path.$name.'_cropped.jpg', 100); 
      } 
     } 
    } 
} 
?> 

Когда я положил :

echo '<pre>'; var_dump($_FILES); echo '</pre>'; 

это шоу:

array(1) { 
    'files' => 
    array(5) { 
    'name' => 
    array(2) { 
     [0] => 
     string(12) "IMG_1281.JPG" 
     [1] => 
     string(12) "IMG_1282.JPG" 
    } 
    'type' => 
    array(2) { 
     [0] => 
     string(0) "" 
     [1] => 
     string(10) "image/jpeg" 
    } 
    'tmp_name' => 
    array(2) { 
     [0] => 
     string(0) "" 
     [1] => 
     string(23) "D:\wamp\tmp\phpF735.tmp" 
    } 
    'error' => 
    array(2) { 
     [0] => 
     int(1) 
     [1] => 
     int(0) 
    } 
    'size' => 
    array(2) { 
     [0] => 
     int(0) 
     [1] => 
     int(453437) 
    } 
    } 
} 
+0

'эхо«

'; var_dump($_FILES); echo '
»,' и посмотреть, если он выдает что-нибудь? Если это так, отредактируйте свой вопрос, чтобы включить вывод. –

+0

Обратите внимание, что 'if (isset ($ _ POST))' не очень полезен. Он всегда будет возвращать true; более полезной проверкой будет: 'if (! empty ($ _ POST))'. –

+0

Пока вы на нем, пожалуйста, также разместите HTML-разметку, которую вы используете, чтобы загрузить файл. У него есть атрибут 'enctype =" multipart/form-data "' установлен правильно? –

ответ

0

вы проверили в вашем HTML, как ваш входной файл выглядит?

Foreach ожидает значений в массиве, поэтому, если ваша форма отправляется с использованием enctype = "multipart/form-data", и ваш ввод файлов выглядит ниже, у вас не должно быть проблем.

<input type="file" name="files[]" /> 

Позвольте мне знать, если это решает что-нибудь

Смежные вопросы