download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Картинка в БД (php MySQL)

< 1 2 >

Автор
Съобщение
anonymous
Сря, 17.10.07, 17:47
Как се съхранява картинка в таблица? Намерих някаква информация за БЛОБ, но не ми стана много ясно. Ако някой може да ми даде съвет - за начална скорост :) , ще съм благодарна.
insecteater
Сря, 17.10.07, 18:33
Най добрият начин да направиш това, е да не го правиш изобщо. Имай предвид, че слагането съдържанието на картинки в бази данни ще раздуе размера на таблицата и заявките ще се обработват доста по-бавно, ще имаш по-голяма дискова активност и т.н.

По-идейно е да съхраняваш в поле само името/пътя до картинката, а не самата картинка.

darklight
Сря, 17.10.07, 18:53
Правиш полето, в което ще съхраняваш картинката, от тип BLOB
След това прочиташ цялото съдържание на файла
$fp = fopen( 'пътя-до-файла', 'rb');
$image = fread( $fp, filesize( 'пътя-до-файла');
$fclose( $fp );

После вкарваш в базата данни съдържанието на $image

anonymous
Сря, 17.10.07, 18:57

RE: Картинка в БД (php MySQL)

” Правиш полето, в което ще съхраняваш картинката, от тип BLOB
След това прочиташ цялото съдържание на файла
$fp = fopen( 'пътя-до-файла', 'rb');
$image = fread( $fp, filesize( 'пътя-до-файла');
$fclose( $fp );

После вкарваш в базата данни съдържанието на $image „

благодаря

anonymous
Сря, 17.10.07, 22:37
И за да няма грешки от рода на no such file е добра практика да проверим дали има upload- нат такъв. Да го попроменим незабележимо за човешкото око, но за сметка на това спестявайки си доста главоболия със сигурността. И разбира се да направим това с възможно най- малко писане. В два реда:
if ($_FILES['ufile']['name']) 
	$image = addslashes(fread(fopen($_FILES['ufile']['tmp_name'], 'rb'), filesize($_FILES['ufile']['tmp_name'])));

редактиран от anonymous на 17.10.07 22:38
anonymous
Сря, 17.10.07, 23:45
Наскоро и аз нещо такова пробвах с връзка с ajax... тоест вчера :D
и аз имам въпрос, като е в базата данни, после как се визуализира с тага img?
insecteater
Чет, 18.10.07, 06:03
src атрибута на img тага сочи към php скрипт
Самият php скрипт просто се връзва към базата данни, прочита blob полето и го "изплюва" (например с echo).
Единственият трик е, че преди визуализацията, скрипта трябва да изпрати mime type-а например чрез header("Content-type: image/jpeg"); (За jpg файлове)
А може и header("Content-type: image/png"); или пък header("Content-type: image/gif"); ... така де, схвана логиката.
Коя картинка точно да изскочи, може да се предава чрез параметър

ето пример (не съм го тествал):
в html кода имаме:
<img src="img.php?id=23" alt="image from blob field" />

"изображението" img.php съдържа следното:
header("Content-type: image/jpeg"); //Казва на браузъра, че данните представляват картинка
mysql_connect("host", "user", "pass"); //Връзка към базата данни
mysql_select_db("database"); //Няма нужда от обяснение
$query = 'SELECT blobfield FROM table_name WHERE id='.($_GET['id']*1).' LIMIT 1' ; //Конструиране на заявката ...
$result = mysql_query($query); //... и нейното изпращане
$row = mysql_fetch($result); //обработване резулататa от заявката
echo $row[0]; //Показване съдържанието на картинката 
 

Редакция: пак да повторя, по принцип е лоша идея самите картинки да се съхраняват в базата данни. По-издържано е, в базата данни да се пази само името/пътя до файла.

редактиран от insecteater на 18.10.07 06:05
anonymous
Чет, 18.10.07, 10:32
insecteater е прав! BLOB полетата (в Oracle - CLOB) са удобен начин за съхраняване на големи по обем данни, но както се каза, това забавя четенето, както и оскъпява визуализирането на картинките. Самият преход от четене на картинка от базата през конвертирането й към визуализирането й е много ресурсоотнемащ.
Забелязал съм в много сайтове и още едно калпаво нещо, а именно използването на библиотеката GD в реално време. Така мисля беше направен сайтът на Топспорт.bg. Самата библиотека е нещо много ценно и който я владее, може чудеса да прави с картинки. НО! Само от гледна точка на администраторската поддръжка. Предварително ъплоудване на картинки, обработката им с GD и разполагането им в реални директории. А не това да става по време на разглеждане на сайта.
anonymous
Чет, 18.10.07, 17:26

RE: Картинка в БД (php MySQL)

По-издържано е, в базата данни да се пази само името/пътя до файла.

Дай няколко реда за пример за товта идея, щом е по-добра.

редактиран от anonymous на 18.10.07 17:27
insecteater
Пет, 19.10.07, 06:29
Ами например, ако имаш само една картинка към даден запис от база данни, даже не е и необходимо да слагаш поле за тази картинка. Можеш да запазваш картинката в отделна папка, като по време на upload-а я преименуваш така, че да се свърже с id-то на съответния запис.

Например записът в таблицата за потребител InsectEater има id = 654. В папката images има файл 654.jpg който представлява снимката на InsectEater. Така необходимият път за показване в html кода може лесно да се сглоби
<?php echo '<img src="images/'.($_GET['UserId']*1).".jpg\" alt=\"$UserName\" />"; ?>

резултатът от този код ще бъде:
<img src="images/654.jpg" alt="InsectEater" />

(Зависи откъде взимаш id-то на записа - в случая от $_GET)
Видно е, че е необходимо единствено id-то на потребителя, за да се домогнем и до неговата снимка, без допълнителни извличания от базата данни.

< 1 2 >

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.