Доброго дня.
Робив що то типу такого для перевірки:
$ Filename = "144.JPG";
$ Handle = fopen ($ filename, "r");
$ Contents = fread ($ handle, filesize ($ filename.;
header ( "Content-type: image / jpeg");
echo "$ contents";
fclose ($ handle);
Виводить просто текст, хоча думалося мені що виведе картинку. Шановні підкажіть будь ласка, як на php зберегти саме зображення в бд на mysql, і потім його вивести?
Дякуємо
Безглузде цю справу зберігати зображення в базі даних
Згоден з ise-dvp, але все ж відповім.
вважати файл
$ Fname = "ban.jpg";
$ F = fopen ($ fname, "r");
$ Fc = fread ($ f, filesize ($ fname.;
fclose ($ f);
Законекть до бази
$ Conn = mysql_connect ( "localhost", "root", "на горщику сидів король");
mysql_select_db ( "база");
вставити запис із зображенням
$ Sql = "INSERT INTO табла VALUES (NULL, '". Addslashes ($ fc). "')";
$ Result = mysql_query ($ sql);
mysql_free_result ($ result);
вважати запис із зображенням
$ Sql = "SELECT * FROM табла ORDER BY id DESC LIMIT 1";
$ Result = mysql_query ($ sql);
$ Row = mysql_fetch_assoc ($ result);
$ Pic = $ row [ "pic"];
mysql_free_result ($ result);
вивести його в браузер
ob_end_clean ();
header ( "Content-Type: image / jpg");
echo $ pic;
на всякий випадок структура таблиці
CREATE TABLE 'табла' (
'Id' int (11) NOT NULL auto_increment,
'Pic' blob,
PRIMARY KEY ( 'id')
) ENGINE = MyISAM DEFAULT CHARSET = cp1251;
якщо виводить все-одно текстом - треба дивитися що з веб-сервером відбувається. Швидше за все вже відіслані хедери, або розпочато виведення.
1) приберіть лапки з відлуння. Можливо, інтерпретатор після цього сприймає дані як текст. Але ж у нас не текст, а бінарні дані. І за попереднім раді - простежте, щоб до моменту заголовків і виведення контенту будь-якого іншого висновку не було. І на цей випадок є таке fpassthru
2) здається я досить давно стикався з необхідністю зберігати картинки в бд. Рішення з addslashes не зовсім гуд, може так статися, що якщо забути кодувати бінарні дані при експорті та імпорті, картинки загубляться. Якщо вже вам зовсім не шкода ресурсів сервера (а зберігати бінарники в бд економмностью не назвеш), краще взяти придумане багато років тому base64_encode
Два плюси останньому відповіді добре показують рівень тутешніх відвідувачів.
А аффтар, швидше за все, треба вчити HTML.
Оскільки ті "заголовки", про які йдеться трохи вище - це, швидше за все нормальний HTML, в який наш герой зібрався виводити картинки.
- ви змішали разом і зберігання в базі і висновок картинки в одне велике питання. Візьміть книжку Дмитра Котеровим PHP4 (або PHP5), там є приклад як відповідь на ваше запитання.
- але однозначно зберігати картинки в базі не слід
- в базі зазвичай зберігають посилання, а краще просто імена картинок (посилання формуючи потім)
- а краще в базі зовсім нічого не зберігати про картинках. Формуючи імена файлів картинок у відповідності c будь-яким полем за яким цей запис розпізнаєте.
Ще питання по темі.
Якщо в базі даних не бажано зберігати зображення, то як зробити що б при додаванні в базу даних інформацію, після інформацію виводити в браузер і при цьому виводилася потрібна картинка до цієї інформації? Тобто висновок новин і в той текстом зображення. Додавання інформації відбувається через адміністративну панель.
А як витягти об'єкт або посилання на нього для скачування, якщо це не картинка а будь-який інший файл? Наприклад doc, pdf, mp3?
Мм. У бд не слід зберігати багато даних, краще на сервері.
Але, існують варіанти, коли це необхідно. Наприклад - БД співробітників підприємства. Фотографії там зберігаються маленькі, і підвищується переносимість БД.