IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   PHP MySQL (http://www.imho.ws/showthread.php?t=47252)

shuron 29.12.2003 18:40

PHP MySQL
 
расскажите как картинку можно сохранить в MYSQL
картинки будут закачиватся на сарвак и м этим я уже разобрался...
ну имя файла (и остальные данные) достаю так:
$filename = $_FILES['userfile']['tmp_name'];
во только не знаю какой SQL запрос создать?

RaZEr 29.12.2003 18:45

http://php.spb.ru/php/image.html

shuron 29.12.2003 19:09

прикольно!!
хороший ресурс, спасибо!
а я ещё где-то про LOAD комманду в MYSQL читал. про это не слыхали?
как это делается? и какой вариант лучше?

FreeSpace 31.12.2003 22:36

Цитата:

shuron:
и какой вариант лучше?
лучше хранить фотки в директории отдельной, а в базе данных хранить пути к этим фоткам.
Из соображений производительности.

Stasik 01.01.2004 22:20

по идее база работает быстрее.... я не думаю что сильно большая разница в производительности, но блин.... удобнее в mysql

shuron 01.01.2004 23:54

ок ясненько

FreeSpace 01.01.2004 23:56

Цитата:

Stasik:
по идее база работает быстрее.... я не думаю что сильно большая разница в производительности, но блин.... удобнее в mysql
Удобнее, не спорю.
Но есть куча минусов:
1. База НЕ работает быстрее файлов. База сама написана на файлах, как понимаешь. Чтобы соединится с базой, нужно открывать сокетное соединение, отправлять запрос серверу баз данных, потом получать от него ответ и только после этого тебе будут доступны те самые данные, которые ты запрашивал. Это не так заметно, если сервер баз данных и веб-сервер - это одна машина. Но не у всех хостеров это именно так.
2. Новички путаются с addslashes и magic_quotes_gpc, ругаются, почему картинки бьются при вставке в базу данных.
3. Картинки мало просто положить в базу данных, их ещё надо выводить... не раз уже встречал уникумов которые писали что-то типа
PHP код:

<TABLE>
    <TR>
        <TD><?=$row['photo']?></TD>
    </TR>
</TABLE>

а потом жаловались, что браузер не показывает картинку :)
На самом деле, чтобы вытащить картинку из базы данных нужно опять же подключится к СУБД, послать туда запрос, получить назад картинку (через сокет! Не забывайте, что хостер может отделить СУБД от веб-сервера и поставить их на разных компах), отправить соответствующие заголовки, желательно с поддержкой кеширования (а все ли новички знают, какие именно заголовки отправлять?) и только после этого вывести саму картинку.
И ссылатся на неё как <IMG SRC="picture.php?id=18">
Имхо, не самый удобный способ, в первую очередь из соображений производительности.

shuron 02.01.2004 00:02

интересные сооброжения однако не убедили
База данных и вебмервер это одна машина. Да и с остальными пунктами вроде разберусь.
;)

FreeSpace 02.01.2004 00:19

Ну моё дело - предупредить :)

Saruman 02.01.2004 00:23

ИМХО оптимальней всего вынести доступ к картинкам в отдельный data access object, и вести всю работу только через него. Хочешь хранить картинки в базе - хранишь. Возникают в дальнейшем проблемы с производительностью - меняешь _только_ dao на работы с картинками в файловой системе, а не БД. При нормальной реализации dao такая замена будет прозрачна для всех остальных классов.

shuron 02.01.2004 00:35

Saruman ты имеёшь в виду что бы добавление картинок былов отдельном классе..
да это идея хороша

Saruman 02.01.2004 00:45

shuron
Не только и не столько добавление, сколько наоборот - получение уже добавленных.

shuron 02.01.2004 00:47

ок ясно, спасибо за советы

FreeSpace 02.01.2004 01:10

Полностью согласен с идеей Saruman.

RaZEr 02.01.2004 04:23

А чего там за получение такое что целый класс под него ?

shuron 02.01.2004 05:07

короче тут я всё сделал - работает вроде не плохо.
Класс вышел только для upload. для добавлени скриптик и для получения сой скриптик. Второму просто по GET передаю id нужной картинки.

Ну а теперь у меня другой вопрос по MySQL но это не здесь, рядом смотрите

Добавлено через 4 минуты:
всем спасибо!

FreeSpace 02.01.2004 05:09

RaZEr
Ну вот смотри.
Решил ты хранить картинки в базе данных, написал ты такой класс для их отображения:
PHP код:

class Picture
{
    
// статический метод
    
function show ($picture_name)
    {
        
$Query 'SELECT data, type
            FROM pictures
            WHERE `name` = "'
addslashes($picture_name).'"';
        
$result mysql_query($Query);
        
// сюда повставлять ещё проверок "нашло/не нашло картинку"
        
$picture mysql_fetch_array($result);
        
header('Content-Type: '.$picture['type']);
        echo 
$picture['data'];
        return 
true;
    }


А потом передумал и решил хранить картинки в файлах... или наоборот - без разницы :)
PHP код:

class Picture
{
    var 
$pictures_directory './pictures/';
    var 
$pictures_extension '.jpg';
    var 
$content_type       'image/jpeg';
    
    
// другой статический метод
    
function show ($picture_name)
    {
        
$full_path $this->pictures_directory $picture_name $this->puictures_extension;
        
// проверки, существует ли файл, доступен ли для чтения и т.д.
        
header('Content-Type: '.$this->content_type);
        echo 
file_get_contents($full_path);
        return 
true;
    }


Всё, что тебе нужно - это переписать класс. Остальной код можно даже не трогать.

ЗЫ: примеры очень упрощенные, не стоит использовать их в реальных ситуациях :)
Например, второй класс поддерживает только джипеги...

Saruman 02.01.2004 05:13

Также для получения полноценного класса сюда же стоит добавить добавление-редактирование-удаление картинок, чтобы вся работа с ними была сосредоточена в одном классе.

shuron 02.01.2004 05:18

классно!!!


Часовой пояс GMT +4, время: 19:43.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.