За последние 24 часа нас посетили 22734 программиста и 1253 робота. Сейчас ищут 802 программиста ...

помогите поправить загрузчик изображений

Тема в разделе "PHP для новичков", создана пользователем top64, 9 окт 2020.

Метки:
  1. top64

    top64 Новичок

    С нами с:
    9 окт 2020
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте, помогите поправить загрузчик изображений на PHP. Он работает, но надо чтобы уменьшал картинку до 200рх по большей стороне сохраняя пропорции. Спасибо.

    PHP:
    1. <?php  
    2.     // Название <input type="file">
    3. $input_name = 'file';
    4. // Разрешенные расширения файлов.
    5. $allow = array(
    6.     'png', 'jpg', 'jpeg', 'gif'
    7. );
    8. // Запрещенные расширения файлов.
    9. $deny = array(
    10.     'phtml', 'php', 'php3', 'php4', 'php5', 'php6', 'php7', 'phps', 'cgi', 'pl', 'asp',
    11.     'aspx', 'shtml', 'shtm', 'htaccess', 'htpasswd', 'ini', 'log', 'sh', 'js', 'html',
    12.     'htm', 'css', 'sql', 'spl', 'scgi', 'fcgi'
    13. );
    14.  
    15.  
    16. $target_path = $target_path . basename( $_FILES['picture']['name']);
    17. // Директория куда будут загружаться файлы.
    18. $path = __DIR__ . '/img/avatars/';
    19. if (isset($_FILES[$input_name])) {
    20.     // Проверим директорию для загрузки.
    21.     if (!is_dir($path)) {
    22.         mkdir($path, 0777, true);
    23.     }
    24.     // Преобразуем массив $_FILES в удобный вид для перебора в foreach.
    25.     $files = array();
    26.     $diff = count($_FILES[$input_name]) - count($_FILES[$input_name], COUNT_RECURSIVE);
    27.     if ($diff == 0) {
    28.         $files = array($_FILES[$input_name]);
    29.     } else {
    30.         foreach($_FILES[$input_name] as $k => $l) {
    31.             foreach($l as $i => $v) {
    32.                 $files[$i][$k] = $v;
    33.             }
    34.         }      
    35.     }  
    36.    
    37.     foreach ($files as $file) {
    38.         $error = $success = '';
    39.         // Проверим на ошибки загрузки.
    40.         if (!empty($file['error']) || empty($file['tmp_name'])) {
    41.             switch (@$file['error']) {
    42.                 case 1:
    43.                 case 2: $error = 'Превышен размер загружаемого файла.'; break;
    44.                 case 3: $error = 'Файл был получен только частично.'; break;
    45.                 case 4: $error = 'Файл не был загружен.'; break;
    46.                 case 6: $error = 'Файл не загружен - отсутствует временная директория.'; break;
    47.                 case 7: $error = 'Не удалось записать файл на диск.'; break;
    48.                 case 8: $error = 'PHP-расширение остановило загрузку файла.'; break;
    49.                 case 9: $error = 'Файл не был загружен - директория не существует.'; break;
    50.                 case 10: $error = 'Превышен максимально допустимый размер файла.'; break;
    51.                 case 11: $error = 'Данный тип файла запрещен.'; break;
    52.                 case 12: $error = 'Ошибка при копировании файла.'; break;
    53.                 default: $error = 'Файл не был загружен - неизвестная ошибка.'; break;
    54.             }
    55.         } elseif ($file['tmp_name'] == 'none' || !is_uploaded_file($file['tmp_name'])) {
    56.             $error = 'Не удалось загрузить файл.';
    57.         } else {
    58.             // Оставляем в имени файла только буквы, цифры и некоторые символы.
    59.             $pattern = "[^a-zа-яё0-9,~!@#%^-_\$\?\(\)\{\}\[\]\.]";
    60.             $name = mb_eregi_replace($pattern, '-', $file['name']);
    61.             $name = mb_ereg_replace('[-]+', '-', $name);
    62.             // Т.к. есть проблема с кириллицей в названиях файлов (файлы становятся недоступны).
    63.             // Сделаем их транслит:
    64.            
    65.             $parts = pathinfo($name);
    66.             if (empty($name) || empty($parts['extension'])) {
    67.                 $error = 'Недопустимый тип файла ! Разрешено .png .jpg .jpeg .gif';
    68.             } elseif (!empty($allow) && !in_array(strtolower($parts['extension']), $allow)) {
    69.                 $error = 'Недопустимый тип файла ! Разрешено .png .jpg .jpeg .gif';
    70.             } elseif (!empty($deny) && in_array(strtolower($parts['extension']), $deny)) {
    71.                 $error = 'Недопустимый тип файла ! Разрешено .png .jpg .jpeg .gif';
    72.             } else {
    73.                 // Чтобы не затереть файл с таким же названием, добавим префикс.
    74.                 $i = 0;
    75.                 $prefix = '';
    76.                 while (is_file($path . $parts['filename'] . $prefix . '.' . $parts['extension'])) {
    77.                       $prefix = '(' . ++$i . ')';
    78.                 }
    79.                
    80.                 // Перемещаем файл в директорию.
    81.                 $name =  $user_ID . '.png';
    82.                 if (move_uploaded_file($file['tmp_name'], $path . $name)) {
    83.                     // Далее можно сохранить название файла в БД и т.п.
    84.                     $success = 'Файл «' . $name . '» успешно загружен.';
    85.                 } else {
    86.                     $error = 'Не удалось загрузить файл.';
    87.                 }
    88.             }
    89.         }
    90.        
    91.         // Выводим сообщение о результате загрузки.
    92.         if (!empty($success)) {
    93.             echo '<div style="border: 1px solid #43613D; border-radius: 5px; background-color: #8FB387; padding: 5px; margin: 5px; color: #43613D;">' . $success . '</div>';      
    94.         } else {
    95.             echo '<div  style="border: 1px solid #5F4646; border-radius: 5px; background-color: #B29494; padding: 5px; margin: 5px; color: #592626;">' . $error . '</div>';
    96.         }
    97.     }
    98. }
    99.    
    100. ?>
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    PHP:
    1.     public function scale( int $size, callable $callable ): void
    2.     {
    3.         if ( $callable( imagesx ( $this -> im ), imagesy ( $this -> im ) ) )
    4.         {
    5.             $w = ceil ( imagesx ( $this -> im ) / ( imagesy ( $this -> im ) / $size ) );
    6.            
    7.             $h = $size;
    8.         }
    9.         else
    10.         {
    11.             $w = $size;
    12.            
    13.             $h = ceil ( imagesy ( $this -> im ) / ( imagesx ( $this -> im ) / $size ) );
    14.         }
    15.        
    16.         $this -> GraphicsDraw -> scale( ( int ) $w, ( int ) $h, IMG_BILINEAR_FIXED );
    17.     }
    18.    
    19.     public function scaleMin( int $size ): bool
    20.     {
    21.         if ( $size > min ( imagesx ( $this -> im ), imagesy ( $this -> im ) ) )
    22.         {
    23.             $this -> scale( $size, fn( $x, $y ) => $x > $y );
    24.            
    25.             return true;
    26.         }
    27.        
    28.         return false;
    29.     }
    30.  
    31.     public function scaleMax( int $size ): bool
    32.     {
    33.         if ( $size > max ( imagesx ( $this -> im ), imagesy ( $this -> im ) ) )
    34.         {
    35.             $this -> scale( $size, fn( $x, $y ) => $x < $y );
    36.            
    37.             return true;
    38.         }
    39.        
    40.         return false;
    41.     }
     
  3. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58