Прежде всего помните, что у метода хранения изображений в базе данных есть свои плюсы и минусы.
+ Файлы проекта хранятся централизовано (что особенно хорошо при командной разработке).
+ Доступ к файлам в любом случае будет осуществляться через скрипт-загрузчик, что дает возможность более гибко контролировать этот процесс.
— Доставка файла скриптом из БД будет с большей вероятностью проходить медленнее чем апачем из файловой системы.
— В целом дамп БД будет слишком большим и, возможно, репликация будет требовать широких каналов между удаленными серверами. Также такой дамп будет трудно читаем по F3, т.к. бинарные данные будут смешаны с другими данными.
Ну а после эдакого вступления приступим к кодированию.
Прежде всего будем считать, что начальным источником изображения является локальный файл. Откроем его и считаем информацию. После чего добавим её в базу, вычитаем из базы и выведем на экран.
<?php
$fileName = "77525-1920x1080.jpg"; //имя файла
$f = fopen($fileName,"r"); //открываем файл
$read = fread($f,filesize($fileName)); //считываем содержимое
fclose($f); //закрываем файл
$conn = mysql_connect("localhost", "name", "password"); //соединяемся с сервером базы данных ! введите свои данные
mysql_select_db("my_db"); //выбираем базу данных
$img = addslashes($read); //приводим содержимое файла в пригодный для сохранения вид
$result = mysql_query("INSERT INTO imgs (img) VALUES('$img')",$conn); //вставляем в базу данных новую запись
if ($result == 'true') { //если всё прошло гладко запрашиваем строку и выводим на экран
mysql_free_result($result);
$sql = "SELECT * FROM imgs ORDER BY id DESC LIMIT 1";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$pic = $row["img"];
mysql_free_result($result);
ob_end_clean(); //очищает буфер вывода и отключает буферизацию вывода
header("Content-Type: image/jpg"); //указываем браузеру что это изображение
echo $pic; //выводим данные
}
?>
При этом таблица imgs у меня имела такой вид:
CREATE TABLE `img` ( `id` int(11) NOT NULL auto_increment, `img` blob, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Примите во внимание, что таким образом сохранить выйдет только изображения до 2 Гб. Можно использовать LONGBLOB — 4 Гб, хотя врядли єто понадобится.







