Как на MVC с помощью PHP загружать изображения на сервер


X

Как на MVC с помощью PHP загружать изображения на сервер

В этой статье мы разберем, как на MVC при помощи PHP правильно загружать картинки на сервер.

Первым делом, создаем файл с формой, он будет находиться по пути: views/site/. Назовем его download_img.php. Запишем в него следующий код:

<html>
<head></head>
<body>
<form method="post" action=""  enctype="multipart/form-data">
    <input name="img_url" type="file">
    <input class="button" type="submit" name="submit" value="Загрузить">
</form>
</body>
</html>

 

Теперь прописываем маршрут к  методу отрисовки этой страницы. Делаем мы это в папку config, в файле routes.php:

'dimg' => 'site/downImg',

 

В папке controllers открываем файл SiteController.php. В нем записываем метод для отрисовки страницы:

public function actionDownImg()
{
    if(isset($_POST['submit']))
    {
        $img_url = $_FILES['img_url']['name'];
        $tmp_name_img= $_FILES['img_url']['tmp_name'];
        $size_img = $_FILES['img_url']['size'];
        Page::downloadImg($img_url, $tmp_name_img, $size_img);
    }
    require_once(ROOT . '/views/site/download_img.php');
    return true;
}

 

Тут мы отрисовываем страницу и если нажата кнопка, то методом пост получаем сведенья о загруженной картинке и вызываем функцию downlaodImg. Эта функция будет располагаться в файле Page.php, который находится в папке models.

public static function downloadImg($img_url, $tmp_name_img, $size_img)
{
    $img_url1= self::translitPhp($img_url);
    $path = 'img/'; // Путь к папке
    $file_type = substr($img_url1, strrpos($img_url1, '.')+1); // Получаем Расширение файла
    $pos = strpos($img_url1, ".");
    $fn = substr($img_url1, 0, $pos);
    $file_name = $fn;
    // Новое сгенирированное имя для нашего файла
    $img_url1=$file_name.(self::getRandomFileName($path, $file_type)).'_goodnets.ru_.'.$file_type;

 

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

Далее записываем расширение файла в переменную file_type. Для этого в пути файла мы сначала находим последнее вхождение точки с помощью функции strrpos, а затем с помощью функции substr отрезаем все, что идет до точки и ее саму. Таким же образом, вырезаем из пути имя файла и записываем его в file_name.

Полученное имя с помощью функции getRandomFileName переводим в md5, это нужно для того, чтобы не возникал конфликт имен при загрузке файлов на сервер.

    if (move_uploaded_file($tmp_name_img, $path . $img_url1)) {
        $newFileName = $path . $img_url1;
        // Открытие переданного изображения
        if (($file_type == 'png') || ($file_type == 'PNG')) {
            $src = imagecreatefrompng($newFileName);
            $ar = self::changeSizeImg($newFileName, $src);
            $dest = $ar[0];
            imagepng($dest, $newFileName, 0);
            imagedestroy($dest);
        }
        if (($file_type == 'jpg') || ($file_type == 'JPG') || ($file_type == 'jpeg') || ($file_type == 'JPEG')) {
            $src = imagecreatefromjpeg($newFileName);
            $ar = self::changeSizeImg($newFileName, $src);
            $dest = $ar[0];
            imagejpeg($dest, $newFileName, 100);
            imagedestroy($dest);
        }
    }
}

 

Если загруженный файл успешно перенесен на сервер, то проверяем его расширение.  В переменную newFileName записываем конечный путь к файлу. Мы можем загружать файлы с расширением jpg и png. Также картинку мы будем немного ужимать, чтобы занимать меньше серверного места.

Далее будут представлены, используемы функции, они будут находиться в файле Page.php, который находится в папке models:

translitPhp – функция, которая с помощью функции str_replace посимвольно заменяет кириллицу на латиницу:

public static function translitPhp($url){
    $rus = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я');
    $lat = array('A', 'B', 'V', 'G', 'D', 'E', 'E', 'Gh', 'Z', 'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'Ch', 'Sh', 'Sch', 'Y', 'Y', 'Y', 'E', 'Yu', 'Ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', 'y', 'y', 'y', 'e', 'yu', 'ya');
    $url= str_replace($rus, $lat, $url);
    return $url;
}

 

getRandomFileName – функция, которая служит для создания файлу уникального имени.

public static function getRandomFileName($path, $extension='')
{
    $extension = $extension ? '.' . $extension : '';
    $path = $path ? $path . '/' : '';
    do {
        $name = md5(microtime() . rand(0, 9999));
        $file = $path . $name . $extension;
    } while (file_exists($file));
    return $name;
}

 

В этой функции используются тернарные операторы. При их использование вместо ключевых слов пишем ? и : .

Переменная = Условие ? true : false;

 

Без использования тернарных операторов вышел бы вот такой код:

if(Условие) Переменная = true;
else Переменная = false;

 

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

public static  function changeSizeImg($full_url, $src){
    // Получение размера загруженного изображения
    $imgInfo = getimagesize($full_url);
    // Масштабный коэффициент
    $scale = 768/$imgInfo[0];
    // Новая высота
    $newheight = $imgInfo[1]*$scale;
    settype($newheight, "integer");
    // Создание нового изображения
    $dest = imagecreatetruecolor(768, $newheight);
    imageAlphaBlending($dest, false);
    imageSaveAlpha($dest, true);
    // Копирование изображения
    imagecopyresampled($dest, $src, 0, 0, 0, 0, 768, $newheight, $imgInfo[0], $imgInfo[1]);
    return array($dest, $newheight);
}

 

Вот так при помощи PHP можно написать загрузку картинок на MVC. Данный метод прост в реализации и исключает возникновение конфликта имен.

 

Смотрите также дополнительные статьи про MVC

 

 

 

Grai Просмотров сегодня +3 20 июня 2017 команда сайта
Ещё пока нет комментариев, будь первым!
Оставить комментарий
   🔔 Отдохните не много, может Вам будет интересно прочитать статьи пользователей нашего сайта.

Как проверить радио кнопку checkbox без перезагрузки страницы ajax php

Как узнать ID последней вставленной записи

Как на MVC с помощью PHP загружать изображения на сервер

Как на MVC с помощью PHP правильно загружать файлы с сервера. Часть Вторая

Тег area - это область ссылки

Решил и я написать статью о том, как покупал сайт на бирже ТЕЛДЕРИ

Тег address - это обозначения контактной информации автора

Подключение к БД и вывод результата на PHP через PDO на MVC

Тег base - это базовый адрес

Раскрутка группы Вконтакте с помощью лайков

Работа с БД на MVC создание модели и выполнение SQL запросов. Часть Вторая

Ограничение символов вводимых в текстовое поле на JavaScript

Стоматология в Улан-Удэ | ДентаВита | Шок цены !
Реклама От всей нашей семьи хотим выразить огромную благодарность стоматологической клинике
Осмотр, консультация от 150 руб.
Рентгеновский снимок от 100 руб.
dentavita03.ru
Наши цены Отзывы
Создание сайтов и мобильных приложений | Любой сложности | Android, iOS, AR, VR
Реклама Собственный фреймворк. Большие и сложные проекты. ТОП 100 разработчиков РФ.
Создание сайтов от 5 000 руб.
Мобильные приложения от 50 000 руб.
irogex.ru
Наши проекты Контакты
Реклама помогает поддерживать
и развивать наш сервис.


Подробнее
(ссылка откроется в новой вкладке)
  Реклама