Показать сообщение отдельно
Старый 21.10.2009, 10:08     # 13
killhunter
Junior Member
 
Аватар для killhunter
 
Регистрация: 24.10.2002
Сообщения: 68

killhunter Известность не заставит себя ждать
Вот вариант с учётом, анализа ошибок загрузки и проверки временного фаила на ноль. Всё работает.
Кстати фаил a.b.c.d.jpg тоже правильно грузится
Поясню про 8 символов - сделано по двум причинам:
1. ограничить имя конечного фаила после bin2hex()
2. можно было и 5,7; 8 символов просто небольшая хитрость и пыль в глаза

PHP код:
$max_image_width = 150;
$max_image_height = 301;
$valid_types = array("jpg", "jpeg", "JPG", "JPEG");

 
if($post=="Y")
  {
        
    // Каталог, в который мы будем принимать файл:
    $uploaddir = 'upload/';
    $filename1_1 = $_FILES['image_path']['name'];

         if (eregi("[а-яА-Я]", $filename1_1))
      {
        $error_1="<b>Ошибка:</b> <font color=#FF0000>В имени фаила не должно быть русских букв.</font>";
      }
     else
      {
       $add=rand(1,10).rand(5,20).rand(3,40).rand(1,100);
       $name=substr($filename1_1, 0, strrpos($filename1_1, "."));
       $name_hex=bin2hex($name);
       $filename2_1 = $_FILES['image_path']['tmp_name'];
         if (strrpos($filename1_1, ".") > 9)
           {
            $error_2="<b>Ошибка:</b> <font color=#FF0000>Слишком длинное имя фаила. Допустимо 8 символов до точки.</font>";
           } 
         else
           {
         $ext = substr($filename1_1, 1 + strrpos($filename1_1, "."));
         $image_path = $uploaddir.basename($add.'_'.$name_hex.'.'.$ext);
 
        if (!in_array($ext, $valid_types)) 
           {
            $error_4="<b>Ошибка:</b> <font color=#FF0000>Неправильный тип фаила. Допустимо (jpg, jpeg) или фаил не указан.</font>";
           } 
         else 
           {

            if($_FILES['image_path']['error'] === 0)
             {
               if(isset($_FILES['image_path']) && is_uploaded_file($_FILES['image_path']['tmp_name']) && $_FILES['image_path']['size'])
               {
                $size = getimagesize($filename2_1);
                 if (($size) && ($size[0] == $max_image_width) && ($size[1] < $max_image_height)) 
                  {
                  // Копируем файл из каталога для временного хранения файлов:
                  if (copy($filename2_1, $image_path))
                    {
                         //грузим на сервер и в базу                                
                             
                     } else  $error_5="<b>Ошибка:</b> <font color=#FF0000>Не удалось загрузить файл на сервер!</font"; 

                  } else  $error_6="<b>Ошибка:</b> <font color=#FF0000>Неправильные размеры изображения. Измените, пожалуйста, размеры изображения до: ширина = 150px, высота максимально - 300px.</font>"; 
              } else $error_3="<b>Ошибка:</b> <font color=#FF0000>Такого фаила не существует</font>";
            } 
          else 
            {
               if($_FILES['image_path']['error'] === 1)
               { $msg="<b>Ошибка:</b> <font color=#FF0000>Размер файла ".BASENAME( $_FILES['image_path']['name'])." больше максимально допустимого размера, разрешённого директивой upload_max_filesize конфигурационного файла php.ini.</font>"; }
               if($_FILES['image_path']['error'] === 2)
               { $msg="<b>Ошибка:</b> <font color=#FF0000>Размер фаила ".BASENAME( $_FILES['image_path']['name'])." слишком большой. Допустимо не более 50Kб.</font>"; }
               if($_FILES['image_path']['error'] === 3)
               { $msg="<b>Ошибка:</b> <font color=#FF0000>Файл ".BASENAME( $_FILES['image_path']['name'])." был получен только частично.</font>"; }
               if($_FILES['image_path']['error'] === 4)
               { $msg="<b>Ошибка:</b> <font color=#FF0000>Файл не был загружен. Вероятнее всего Вы не выбрали файл.</font>"; }
            }
          }
        }
      }   
    }
.....
<? echo $error_1?>
<? 
echo $error_2?>
<? 
echo $error_3?>
<? 
echo $error_4?>
<? 
echo $error_5?>
<? 
echo $error_6?>
<? 
echo $msg?>
.....
<form action="<? $PHP_SELF?>" method="post" enctype=multipart/form-data>
<input type="hidden" name="post" value="Y">
<input type="hidden" name="MAX_FILE_SIZE" value="50000">
....
<input type="file" name="image_path" value="<? echo $image_path?>" size=25>
....
<input type="submit" value="Добавить"> 
</form>
Всем спасибо за помощь и ссылки на мануал.
Пойду выяснять про отличие copy и move_uploaded_file в аспекте безопасности.
__________________
Через терни к звездам!
killhunter вне форума