blob image php mysql blob

blob image php mysql blob

Работа с файлами blob. Рассмотрим как узнать blob size и blob type. Научимся загружать в mysql blob картинки. Изучим blob тип данных.

Приветствую всех на своём канале.
Давненько не было видео, но я надеюсь, что теперь видео снова будут выходить регулярно.
По просьбе моего давнего подписчика я сделал видео про сохранение в базу и вывод из неё изображений в формате blob. 
Не надо мне рассказывать, что хранить картинки в базу — это плохая идея, я это и так знаю, но на практике я много раз встречался с такими ситуациями, и вот решил сделать видео как работать с такими базами.
Сегодня я покажу как сделать форму отправки картинок, вывод на страницу превью и по щелчку открою новую страницу с полноразмерной картинкой.
Сначала давайте разберёмся что же такое BLOB файлы.
Как нам говорит Википедия, BLOB переводится с английского как Binary Large Object — двоичный большой объект), а если проще, то массив двоичных данных.
Повторюсь, что правильнее хранить в базе ссылки на картинки, и сами изображения хранить на сервере.
Если вы слабо разбираетесь в связке PHP-MYSql, то вы можете посмотреть предыдущие виде на моём канале. Я же буду считать, что вы их уже видели, или что сможете сами разобраться в материале.
Для начала я создал базу данных. Все коды и база данных будет лежать на моём сайте и вы можете скачать их по ссылке в описании.
Давайте посмотрим, что у меня получилось.

Как видите ничего интересного здесь нет. Всё как обычно, выбираем нужный файл, нажимаем загрузить. Картинка переводится в бинарный файл и сохраняется в базу. Вы не сможете посмотреть её в базе через PHPMyAdmin. Для этого вам придётся скачать его на свой компьютер.
На главной странице сверху форма для загрузки файлов, а ниже в столбик выводятся превью файлов-картинок. Сверху выводятся названия файлов и размер. На превью можно нажать и перейти на новую страницу, где эта же картинка будет показана в полном размере. Я не стал выводить на yq название и размер, вы можете сделать это по аналогии с главной страницей.
Теперь пробежимся по коду.
Рассмотрим базу.
Моя база данных называется picture, а таблица images. Вы же можете обозвать её как хотите. 
Для хранения я создал в таблице вот такие поля.
id ID служат для быстрого обращения к нужной картинке и для сортировки и вывода на страницу по возрастанию или по убыванию.
img это тип файла. У меня это тип файла MediumBLOB. Здесь будет храниться сама картинка. Если вы хотите хранить огромные файлы, то можете сделать это поле типа LongBLOB
img_name img_name Это название файла. Его я буду выводить на страницу
img_size Ну и последнее поле это размер файла.
Кстати в коде я запретил загружать файлы больше 2 мегабайт.
Теперь переходим к коду.
У меня это 4 файла.
Первый это connect_db.php
Здесь я прописал все настройки для соединения с базой данных, и вывод сообщений о полученных ошибках и если соединение прошло успешно.
Второй файл это index.php 
Вначале подключаем файл с настройками базы данных.
Создаём форму для отправки картинок методом POST, так как картинки большие и GET здесь использовать не получится.
Это простая форма содержащая всего два инпута. Первый для ввода файла, а второй, кнопка отправки. 

Напишем скрипт который загружает картинку в базу.
Создадим условие. 
Если с формы пришёл файл методом POST и он не пустой, то продолжаем, в противном случае выходим.
В этой строчке проверяем тип файла. Так как мы будем загружать только картинки, то тип данных будет images. То есть нам надо отрезать всё лишнее после 5 символов, и если мы получим строку images, то продолжаем дальше. 
Теперь ограничим размер файла до 2 мегабайт. Это можно сделать так.
В условии также проверяем на ограничение размера.
Функция addslashes добавляет слэш перед спец символами. Например, экранируются одиночная или двойная кавычка. Это необходимо делать для правильной работы скрипта. 
Сохраняем в базу данных картинку, её имя и размер. На этом сохранение в базу завершено. Теперь будем выводить из базы данные.

Это ссылка на страницу для вывода всех картинок в полном размере.
Выводим все картинки из базы. Сначала будут самые новые картинки. Выгружаем все данные в массив и присваиваем их своим переменным. 
Выводим название картинки и её размер. Теперь выводим превью картинки и делаем её ссылкой на оригинал.

При нажатии на превью мы переходим на страницу  images пиэйчп+и. Этот файл выводит картинку в полном размере. 
Здесь нет ничего сложного. По полученному по GET номеру ID мы выводим картинку из базы с её названием и размером.

Ну и последний файл это show all.php Он отвечает за вывод всех картинок в полном размере. Здесь так же ничего сложного. Просто все картинки выводятся на страницу в ряд. Если не умещаются, то переносятся на новый ряд.
Теперь давайте посмотрим как это работает. Выбираем файл на своём компьютере и загружаем в базу. Вы видите, что размер файла составляет 356 килобайт. Эти же 356 килобайт мы видим в базе и на странице. Так же мы видим сохранённое название картинки.
Давайте загрузим ещё одну картинку. Выберем вот эту. Она весит 443 килобайта и называется Солнечный трэкер. Загружаем и видим, что она появилась на странице и находится наверху, так как у нас в коде указано, что самые последние выводить сверху.
Кликаем на неё и она открывается в новом окне. Название и размер так же выводятся сверху. В реальном примере вам надо будет немного увеличить размер шрифта, но думаю, что это вы уже умеете.
Теперь возвращаемся на главную страницу.
Ну и последняя из ещё не опробованных страниц – это вывод все картинок на одной странице. Здесь в отличии от главной страницы все картинки выводятся в полном размере, а не их превью.
Теперь снова посмотрим нашу базу. Мы видим, что у нас в таблице images находятся 3 картинки в формате blob, с названиями и размером файла.
Ну и напоследок я покажу как можно перевести картинку в бинарный код и сохранить её в базу.
Делаем принтскрин экрана и сохраняем картинку на компьютере. Я сохранил её под именем 1. Теперь в notepad++ открываем эту картинку и она открывается вот в таком виде. Сохраняем под другим названием. Я сохранил как 1 1. 

Переходим в базу и выбираем наш бинарный файл под именем 1 1. Нажимаем вперёд и у нас формируется вот такой SQL запрос. 
Переходим на вкладку Обзор и видим, что файл был успешно добавлен. Это можно посмотреть на главной вэб странице. Я не знаю зачем вам это может пригодиться, но лишние знания не помешают.