Все хватит ерундистики. Будем учится. Вот сейчас будет первая обучающая статья и называется она Вывод картинок из БД(MySql) Недавно наткнулся на интересный способ хранения изображений вот и решил о нем рассказать. Для хранения изображений в базе данных MySQL необходимо определить одно из полей таблицы как производное от типа BLOB. Сокращение BLOB означает большой двоичный объект. Тип хранения данных BLOB обладает несколькими вариантами:
- TINYBLOB - может хранить до 255 байт
- BLOB - может хранить до 64 килобайт информации
- MEDIUMBLOB - до 16 мегабайт
- LONGBLOB - до 4 гигабайт
Соответсвенно, для хранения изображений нам надо создать таблицу images с двумя полями:
- id - уникальный ID изображения
- content - поле для хранения изображения
Для сохранения файла изображения в базе данных необходимо прочитать файл в переменную и создать запрос на добавление данных в таблицу. Допустим у нас есть форма для загрузки файла изображения на сервер:
<form enctype="multipart/form-data" method="post" action="putimage.php"> Изображение: <input type="file" name="image" /> <input type="submit" value="Загрузить" /> </form> Обработчик формы - файл putimage.php:
// Проверяем пришел ли файл if( !empty( $_FILES['image']['name'] ) ) { // Проверяем, что при загрузке не произошло ошибок if ( $_FILES['image']['error'] == 0 ) { // Если файл загружен успешно, то проверяем - графический ли он if( substr($_FILES['image']['type'], 0, 5)=='image' ) { // Читаем содержимое файла $image = file_get_contents( $_FILES['image']['tmp_name'] ); // Экранируем специальные символы в содержимом файла $image = mysql_escape_string( $image ); // Формируем запрос на добавление файла в базу данных $query="INSERT INTO `images`(`id`,`content`) VALUES(NULL, '".$image."')"; // После чего остается только выполнить данный запрос к базе данных mysql_query( $query ); } } } ?> Извлечь сохраненный файл изображения можно следующим образом (файл image.php): if ( isset( $_GET['id'] ) ) { // Здесь $id номер изображения $id = (int)$_GET['id']; if ( $id > 0 ) { $query = "SELECT `content` FROM `images` WHERE `id`=".$id; // Выполняем запрос и получаем файл $res = mysql_query($query); if ( mysql_num_rows( $res ) == 1 ) { $image = mysql_fetch_array($res); // Отсылаем браузеру заголовок, сообщающий о том, что сейчас будет передаваться файл изображения header("Content-type: image/*"); // И передаем сам файл echo $image['content']; } } } ?>
Чтобы вывести изображение в HTML-документе, делаем так:
<img src="image.php?id=17" alt="" /> И последнее: графические файлы иногда имеют довольно большой размер, убедитесь, что настройки сервера позволяют работать с таким объемом данных. В файле php.ini это директивы post_max_size - определяет максимальный объем данных передаваемых методом POST, и upload_max_filesize - определяет максимальный размер загружаемого файла. Так же проверьте, позволяют ли настройки MySQL обрабатывать запросы с большим объемом данных (директива max_allowed_packet файла my.ini).
Да и хочу выразить благодарность автору этой статьи. Вы всегда сможете перейти на авторский сайт по ссылке в блоке "Наши друзья" с правой стороны или прямо отсюда Web-мастер: курс молодого бойца.
|