|
maxfr ↓
|
 |
|
02 Апрель, 2009, 12:17:27
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 546 Сила слова: 0
|
Для хранения изображений в базе данных MySQL необходимо определить одно из полей таблицы как производное от типа BLOB. Сокращение BLOB означает большой двоичный объект. Тип хранения данных BLOB обладает несколькими вариантами:
* TINYBLOB - может хранить до 255 байт
* BLOB - может хранить до 64 килобайт информации
* MEDIUMBLOB - до 16 мегабайт
* LONGBLOB - до 4 гигабайт
Соответсвенно, для хранения изображений нам надо создать таблицу images с двумя полями:
* id - уникальный ID изображения
* content - поле для хранения изображения
Для сохранения файла изображения в базе данных необходимо прочитать файл в переменную и создать запрос на добавление данных в таблицу.
Итак поехали, index.php
<?php
// Соединяемся с сервером БД
mysql_connect ( 'localhost', 'root', '' );
mysql_query( 'SET NAMES cp1251' );
mysql_select_db ( 'images' );
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
// Проверяем пришел ли файл
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 );
$title = mysql_escape_string( $_POST['title'] );
// Формируем запрос на добавление файла в базу данных
$query= "INSERT INTO `images` VALUES(NULL, '". $title. "', '". $image. "')";
// После чего остается только выполнить данный запрос к базе данных
mysql_query( $query );
}
}
}
}
?>
<html>
<head>
<title>Загрузка изображений</title>
<meta http-equiv= "Content-Type" content= "text/html; charset=windows-1251">
</head>
<body>
<h3>Загруженные изображения</h3>
<p>
<?php
$query = "SELECT id, title FROM images WHERE 1 ORDER BY id";
$res = mysql_query( $query );
while( $img = mysql_fetch_array( $res ) ) {
echo '<img src="image.php?id='. $img['id']. '" alt="'. $img['id']. '" />';
}
?>
</p>
<form enctype= "multipart/form-data" method= "post" action= "<?php echo $_SERVER['PHP_SELF'] ?>">
Наименование: <input type= "text" name= "title" value= "" /><br/>
Изображение: <input type= "file" name= "image" /><br/>
<input type= "submit" value= "Загрузить" />
</form>
</body>
</html>
image.php
<?php
// Соединяемся с сервером БД
mysql_connect ( 'localhost', 'root', '' );
mysql_query( 'SET NAMES cp1251' );
mysql_select_db ( 'images' );
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'];
}
}
}
?>
Вот и дамп таблицы images.
CREATE TABLE `images` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`content` blob NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
|
|
|
|
|
Записан
|
Все грамматические ошибки являются авторским стилем изложения материала.©
|
|
|
|
md5 ↓
|
 |
|
02 Апрель, 2009, 12:20:06 , спустя 2 минуты 39 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо Карма: не нужна
Сообщений: 10494 Сила слова: 1.19
|
нахуй надо хранить изображения в базе
ояебу, я опиздошен
|
|
|
|
|
Записан
|
8: Undefined variable: str Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php Строка: 18 adw0rd: мудень блять, я уже фиксить стал эту фигню :) md5: вуахахахаха
|
|
|
|
maxfr ↓
|
 |
|
02 Апрель, 2009, 12:27:37 , спустя 7 минут 31 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 546 Сила слова: 0
|
нахуй надо хранить изображения в базе
ояебу, я опиздошен
Статья выложена для общего развития.
ИМХО: способ правда ебуч***. ПхпМуАдмин грузится очень долго.
|
|
|
|
|
Записан
|
Все грамматические ошибки являются авторским стилем изложения материала.©
|
|
|
|
adw0rd ↓
|
 |
|
02 Апрель, 2009, 12:29:17 , спустя 1 минуту 40 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17615 Сила слова: 1.67
|
нахуй надо хранить изображения в базе
ояебу, я опиздошен
Не всегда это так плохо, как кажется.
|
|
|
|
|
Записан
|
|
|
|
|
CTAPbIu_MABP ↓
|
 |
|
02 Апрель, 2009, 12:33:01 , спустя 3 минуты 44 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
мавр
Группа: в ухо Карма: не нужна
Сообщений: 5187 Сила слова: 1.81
|
у оракла достук к своим данным быстрее чем у файловой системы ос
|
|
|
|
|
Записан
|
java.lang.OutOfMemoryError
|
|
|
|
CTAPbIu_MABP ↓
|
 |
|
02 Апрель, 2009, 12:33:24 , спустя 23 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
мавр
Группа: в ухо Карма: не нужна
Сообщений: 5187 Сила слова: 1.81
|
это я о том что если хранить картинки в бд оракла то это не так уж плохо
|
|
|
|
|
Записан
|
java.lang.OutOfMemoryError
|
|
|
|
AlexB ↓
|
 |
|
02 Апрель, 2009, 12:51:10 , спустя 17 минут 46 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: в ухо Карма: 89
Сообщений: 3423 Сила слова: 2.6
|
нахуй надо хранить изображения в базе
Я могу рассказать такую историю. Мы делали интранет для одной компании. Основной функцией было хранение корпоративных документов и поиск по ним. В основном документы были понятное дело в формате ворд, эксель, повер поинт. Так вот, при хранении их внутри MS-SQL-ных блобов СУБД умеет строить по ним фулл-текст индекс. Таким образом, казалось бы неразрешимая, проблема поиска по бинарникам решается крайне просто. (Правда с PDF мы задачу так и не разрешили, хотя какие-то средства для сторонних форматов там тоже декларируются, подробностей не помню)
Для мускула я пока с такой необходимость не сталкивался, но теоритически тоже можно найти причину. Например репликация базы на slave сервера.
|
|
|
|
« Последнее редактирование: 02 Апрель, 2009, 12:54:30 от AlexB »
|
Записан
|
|
|
|
|
Patrick ↓
|
 |
|
02 Апрель, 2009, 12:56:22 , спустя 5 минут 12 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Группа: Жмурики
Карма: 8
Сообщений: 506 Сила слова: 1.58
|
CTAPbIu_MABP, сам тестил?
фак как НЕ надо хранить данные в БД
|
|
|
|
|
Записан
|
|
|
|
|
Patrick ↓
|
 |
|
02 Апрель, 2009, 12:58:26 , спустя 2 минуты 4 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Группа: Жмурики
Карма: 8
Сообщений: 506 Сила слова: 1.58
|
AlexB, а не проще было парсить доки и строить индекс тем же сфинксом
|
|
|
|
|
Записан
|
|
|
|
|
AlexB ↓
|
 |
|
02 Апрель, 2009, 01:02:17 , спустя 3 минуты 51 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: в ухо Карма: 89
Сообщений: 3423 Сила слова: 2.6
|
А чем их парсить?
А про sphinx мы тогда не знали (он кстати когда появился? да и там MS был полюбому), это вообще дело давнее и наверно было дофига архитектурных косяков, просто привел как пример осмыслленного выбора хранения файлов в БД.
|
|
|
|
« Последнее редактирование: 02 Апрель, 2009, 01:05:07 от AlexB »
|
Записан
|
|
|
|
|
Givi ↓
|
 |
|
02 Апрель, 2009, 01:03:43 , спустя 1 минуту 26 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 42
Сообщений: 2305 Сила слова: 1.82
|
AlexB, думаю что и с файловой системой репликацию можно сделать (если я правильно понимаю что такое репликация в твоем примере).
А в целом ФС удобнее тем, что можно имаги хранить отдельной пачкой, и можно с ними на физическом уровне делать что угодно, не прибегая к нагрузке (выборка из базы) БД. Конечно же, не для всех задач. Просто мой ИМХО - хранение в картинок БД это отстой.
п.с. О репликации вообще знаю очень мало, так как с этим пока работать не приходилось.
п.с.2 У нас есть одна база, где храняться данные юзверей + пароли. Так вот пароли храняться в БЛОБе. Типа через ПМА не видно, работать с ними (паролями) неудобно. А в целом они не хешированные, а открытые текстовые файлики. Просто программист когда это писал, был ещё очень зеленым. Да и было это давно, а переделывать никто не хочет.
|
|
|
|
|
Записан
|
Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь. Если человек дурак, то... чур это не я!
|
|
|
|
AlexB ↓
|
 |
|
02 Апрель, 2009, 01:06:47 , спустя 3 минуты 4 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: в ухо Карма: 89
Сообщений: 3423 Сила слова: 2.6
|
AlexB, думаю что и с файловой системой репликацию
да можно, можно. rsync называется. но вдруг, нужна точная синхронность? вообще я тут никакое решение не защищаю, просто примеры разных вариантов привожу.
|
|
|
|
|
Записан
|
|
|
|
|
Patrick ↓
|
 |
|
02 Апрель, 2009, 01:15:20 , спустя 8 минут 33 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Группа: Жмурики
Карма: 8
Сообщений: 506 Сила слова: 1.58
|
А чем их парсить?
либы думаю есть эт не проблема
|
|
|
|
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
02 Апрель, 2009, 01:19:25 , спустя 4 минуты 5 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17615 Сила слова: 1.67
|
Patrick, ты работал с MS форматами офисных пакетов? Либы то есть, опять таки использующие OLE/COM и т.д., то же использует и MS SQL.
Вопрос, зачем писать сторонние решения, если это проще решить средствами самой СУБД? Тем более каждый раз когда что-то меняется в файла - надо заново индексировать... и добавлять в БД... Только гемор добавится...
|
|
|
|
|
Записан
|
|
|
|
|
md5 ↓
|
 |
|
02 Апрель, 2009, 01:20:37 , спустя 1 минуту 12 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
выезд, апартаменты, массаж, стриптиз, подружки, дорого
Группа: в ухо Карма: не нужна
Сообщений: 10494 Сила слова: 1.19
|
нахуй надо хранить изображения в базе
ояебу, я опиздошен
Не всегда это так плохо, как кажется.
да нет ничего универсального, кто ж спорит
у оракла достук к своим данным быстрее чем у файловой системы ос
не вижу тут оракла
|
|
|
|
|
Записан
|
8: Undefined variable: str Файл: /home/pyha/pyha.ru/forum/bbcode/Xbb/Tags/Man.php Строка: 18 adw0rd: мудень блять, я уже фиксить стал эту фигню :) md5: вуахахахаха
|
|
|
|