Как правило, графический контент для веб страниц хранится непосредственно в файловой системе сервера, а БД содержит только ссылки на соответствующие файлы. Однако, в случае необходимости вполне возможно организовать хранение файлов в БД целиком, с их отображением на веб странице.
Для этого понадобится только создать в БД таблицу с полем для хранения файлов и перед помещением в БД зашифровать их с помощью алгоритма Base64.
Шифрование исходного файла изображения посредством Base64 осуществляется в два этапа.
- Чтение двоичных данных из исходного файла;
- Собственно шифрование с выдачей в результате строки Base.
1 2 3 |
$img_file = "test.jpg"; $img_binary = fread(fopen($img_file, "r"), filesize($img_file)); $img_Base64 = base64_encode($img_binary); |
Для сохранения в БД лучше воспользоваться типом данных семейства BLOB. Добавление файла в БД производится обычным SQL запросом (INSERT).
1 2 3 4 |
$sql="INSERT INTO `imgtable` (`imgdata`) VALUES (s)"; $query=$connection->prepare($sql); $query->bind_param("s", $img_Base64); $query->execute(); |
Соответственно, вывод файла из БД также осуществляется запросом, но уже на выборку (SELECT). Например, так:
1 2 3 4 5 6 7 8 9 |
$sql="SELECT `imgdata` FROM `imgtable`;"; $query = $connection->;prepare($sql); $query->execute(); $res=$query->get_result(); $arr=$res->fetch_array(); foreach ($arr as $img) { echo '<img src="data:image/jpg;base64,'.$img.""; />'; } |
Важно отметить, что при указании в атрибуте src тега img префикса «data:image/jpg;base64,» исключается необходимость в обратной расшифровке файла «вручную». Браузер в этом случае самостоятельно распознаёт Base64 строку как изображение, выполняет её расшифровку и отображает на странице содержимое исходного графического файла.
Приведённый способ работает для изображений любого формата, которые поддерживаются тегом img во всех последних версиях PHP, включая 7.
Добавить комментарий