Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проверка загружаемых изображений на размер(вес) и тип файла
Форумы портала PHP.SU » » Вопросы новичков » Проверка загружаемых изображений на размер(вес) и тип файла

Страниц (1): [1]
 

1. Шмайсер - 13 Октября, 2011 - 11:11:21 - перейти к сообщению
Здравствуйте! есть такая проблема - написал скрипт загрузки нескольких файлов на сервер, вроде все работает, но никак не получается правильно проверить вес и тип файла. Привожу скрипт, в котором пока есть только проверка на вес ( если более 64 Кб то изображение не загружается). Работает корректно, если загрузить один, превышающий по весу файл - ничего не грузится, выдается сообщение об ошибке ( Файл не загружен, так как вес превышает бла-бла-бла)
Но, если, например, загрузить несколько файлов, из которых только один превышает разрешенный размер, то не грузятся ВСЕ ФАЙЛЫ.
Вот код обработчика
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $db_host = 'localhost';
  4. $db_user = 'loader';
  5. $db_pass = '12345';
  6. $db_name = 'loader';
  7.  
  8. $connect = mysql_connect($db_host, $db_user, $db_pass) or trigger_error(mysql_error(),E_USER_ERROR);
  9. mysql_select_db($db_name, $connect);
  10. mysql_query ("SET NAMES utf8");
  11.  
  12.                 if(isset($_FILES['fileToUpload'])) {
  13.                                 $max_image_size = 64 * 1024;
  14.                                 $rb_name_new = array();
  15.                                 $files_count = count($_FILES['fileToUpload']["name"]);
  16.                 for ($i = 0; $i < $files_count; $i++) {
  17.                                        
  18.                                
  19.                                 $img_params =@getimagesize($_FILES['fileToUpload']['tmp_name'][$i]);
  20.                                
  21.                                 switch ($img_params[2])
  22.         {
  23.                 case '1':
  24.                         $rash = 'gif';
  25.                         break;
  26.                
  27.                 case '3':
  28.                         $rash = 'png';
  29.                         break;
  30.  
  31.                 case '2':
  32.        
  33.                         $rash = 'jpg';
  34.                         break;
  35.         }
  36.                                
  37.                                
  38.                 $loc = 'uploads/';
  39.                                 $upl_path = 'uploads/prod/';
  40.                                 $thumb_path = 'uploads/prod/thumb/';
  41.                                 $source = $_FILES['fileToUpload']['tmp_name'][$i];
  42.                                 $type = $_FILES['fileToUpload']['type'][$i];
  43.                                 $target = $upl_path. $_FILES['fileToUpload']['name'][$i];
  44.                                 if (filesize($source) > $max_image_size) {
  45. echo 'Ошибка загрузки файла '.$_FILES['fileToUpload']['name'][$i].' его размер больше, чем 64K.<br />';
  46. }
  47. elseif(move_uploaded_file($source, $target)) {
  48.                                
  49.                                 ///resize big
  50.                                 $rb_name_new[] = uniqid() . '.' . $rash;
  51.                                 $res_src = $upl_path.$rb_name_new[$i];
  52.                                 //получаем параметры загруженного файла
  53.                 $rb_params =@getimagesize($target);
  54.                                 switch($rb_params[2]){
  55.                 case 1:$rb_source=imagecreatefromgif($target);break;
  56.                 case 2:$rb_source=imagecreatefromjpeg($target);break;
  57.                                 case 3:$rb_source=imagecreatefrompng($target);break;
  58.                                    }
  59.                                                                    
  60.                                                                    //если ширина меньше 640 и высота меньше 480
  61.                                                                    //оставляем оригинальные размеры
  62.                                                                    if(($rb_params[0]<=640) && ($rb_params[1]<=480)){
  63.                                    $rb_newwidth = $rb_params[0];                                                                                                               
  64.                                    $rb_newheight = $rb_params[1];                                  
  65.                                                              }
  66.                                                                 //иначе - начинаем урезать пропорционально
  67.                                                                    else {
  68.                                                                    //если высота равна ширине
  69.                                    //вычисляем новую ширину
  70.                                    if($rb_params[1]==$rb_params[0]){
  71.                                    $rb_newheight=640;
  72.                                    $rb_newwidth=floor($rb_newheight*$rb_params[0]/$rb_params[1]);
  73.                                                              }
  74.                                                                                                                          
  75.                                                                         //если ширина равна высоте
  76.                                   //вычисляем новую высоту
  77.                                   if($rb_params[1]==$rb_params[0]){
  78.                                   $rb_newwidth=640;
  79.                                   $rb_newheight=floor($rb_newwidth*$rb_params[1]/$rb_params[0]);
  80.                                                             }
  81.                                                                    
  82.                                                                    //если высота больше ширины
  83.                                    //вычисляем новую ширину
  84.                                    if($rb_params[1]>$rb_params[0]){
  85.                                    $rb_newheight=480;
  86.                                    $rb_newwidth=floor($rb_newheight*$rb_params[0]/$rb_params[1]);
  87.                                                              }
  88.                                   //если ширина больше высоты
  89.                                   //вычисляем новую высоту
  90.                                   if($rb_params[1]<$rb_params[0]){
  91.                                   $rb_newwidth=640;
  92.                                   $rb_newheight=floor($rb_newwidth*$rb_params[1]/$rb_params[0]);
  93.                                                             }
  94.                                                                                                                         }
  95.                                                             //создаем урезку загруженного изображения
  96.                                $rb_resource=imagecreatetruecolor($rb_newwidth,$rb_newheight);
  97.                                                            $white = imagecolorallocate($rb_resource, 255, 255, 255);
  98.                                                            
  99.                   imagecopyresampled($rb_resource,$rb_source,0,0,0,0,$rb_newwidth,$rb_newheight,$rb_params[0],$rb_params[1]);
  100.                                                            imagettftext($rb_resource, 16, 0, 5, 30, $white, $loc."MTCORSVA.TTF", "WWW.LUCKY-REALTY.RU");
  101.                                                            
  102.                                
  103.                                                            
  104.                                                            switch($rb_params[2]){
  105.                 case 1:imagegif($rb_resource,$res_src,70);break;
  106.                 case 2:imagejpeg($rb_resource,$res_src,70);break;
  107.                                 case 3:imagepng($rb_resource,$res_src);break;
  108.                                    }
  109.                                                            
  110.                                                            
  111.                                                            
  112.                                
  113.                                
  114.                                 ///end resize big
  115.                                
  116.                                 $new_name = 't'. $rb_name_new[$i];
  117.                                 $resource_src = $thumb_path.$new_name;
  118.                                 //получаем параметры загруженного файла
  119.                 $params=getimagesize($res_src);
  120.                                
  121.                                 switch($params[2]){
  122.                 case 1:$p_source=imagecreatefromgif($res_src);break;
  123.                 case 2:$p_source=imagecreatefromjpeg($res_src);break;
  124.                                 case 3:$p_source=imagecreatefrompng($res_src);break;
  125.                                    }
  126.                                                                    
  127.                                                                    //если высота равна ширине
  128.                                    //вычисляем новую ширину
  129.                                    if($params[1]==$params[0]){
  130.                                    $newheight=70;
  131.                                    $newwidth=floor($newheight*$params[0]/$params[1]);
  132.                                                              }
  133.                                                                                                                          
  134.                                                         //если ширина равна высоте
  135.                                   //вычисляем новую высоту
  136.                                   if($params[1]==$params[0]){
  137.                                   $newwidth=70;
  138.                                   $newheight=floor($newwidth*$params[1]/$params[0]);
  139.                                                             }
  140.                                                                    
  141.                                                                    //если высота больше ширины
  142.                                    //вычисляем новую ширину
  143.                                    if($params[1]>$params[0]){
  144.                                    $newheight=70;
  145.                                    $newwidth=floor($newheight*$params[0]/$params[1]);
  146.                                                              }
  147.                                   //если ширина больше высоты
  148.                                   //вычисляем новую высоту
  149.                                   if($params[1]<$params[0]){
  150.                                   $newwidth=70;
  151.                                   $newheight=floor($newwidth*$params[1]/$params[0]);
  152.                                                             }
  153.                                                             //создаем миниатюру загруженного изображения
  154.                                $resource=imagecreatetruecolor($newwidth,$newheight);
  155.                                imagecopyresampled($resource,$p_source,0,0,0,0,
  156.                                $newwidth,$newheight,$params[0],$params[1]);
  157.                                imagejpeg($resource,$resource_src,80);//80 качество изображения
  158.                                                                                                                    
  159.                                                            
  160.                                                            //удаляем оригинал картинки
  161.                                                            @unlink($target);
  162.                                                            
  163.                                                                    
  164.                                                                    
  165.                                                                  
  166.         }
  167.  
  168.         }
  169.         $r = mysql_query ("INSERT INTO users SET file0='".$rb_name_new[0]."', file1='".$rb_name_new[1]."', file2='".$rb_name_new[2]."', file3='".$rb_name_new[3]."', file4='".$rb_name_new[4]."'");
  170.        
  171. }
  172. ?>
  173.  

Если не трудно, подскажите как правильно сделать проверку на вес и тип файла. Желательно листинг, потому как я вроде уже все перепробовал, все функции, а корректно не получается.
Заранее спасибо!
2. Viper - 13 Октября, 2011 - 11:36:45 - перейти к сообщению
Вам нужно пройтись циклом по загруженным файлам, сделать проверку и если не прошло то сделать удаление того элемента который не попал под разрешенный размер. Далее снова циклом по $_FILES и уже тогда делаем перемещение.
3. illy - 13 Октября, 2011 - 11:42:00 - перейти к сообщению
в яндекс-почте когда прикрепляешь файл-сразу показывается его вес
посмотри. может найдёшь как это делается
4. Шмайсер - 13 Октября, 2011 - 11:43:01 - перейти к сообщению
Viper пишет:
Вам нужно пройтись циклом по загруженным файлам, сделать проверку и если не прошло то сделать удаление того элемента который не попал под разрешенный размер. Далее снова циклом по $_FILES и уже тогда делаем перемещение.

Viper, да в том то и дело что я все это пробовал, но по каким то причинам это либо не работает, либо работает но некорректно). Вы не могли бы листинг этих циклов привести?
(Добавление)
illy пишет:
в яндекс-почте когда прикрепляешь файл-сразу показывается его вес
посмотри. может найдёшь как это делается

Так это проверка на клиенте, у меня она и так есть. А мне нужно сделать проверку на сервере

 

Powered by ExBB FM 1.0 RC1