Облако ссылок Добавить сайт Опубликовать Пользователи Категории

Сервис полезной информации


Размещайте полезную информацию и одновременно продвигайте свои проекты.


Узнать больше

Как на 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. Данный метод прост в реализации и исключает возникновение конфликта имен.

Grai Просмотров сегодня +4 20 июня 2017 команда сайта
Реклама помогает поддерживать
и развивать наш сервис.


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