Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Загрузка картинок на сайт, добавление в БД и вывод её из БД

#1 Kdes70

Kdes70
  • Пользователь
  • 55 сообщений
  • Репутация: 0
0

Отправлено 19 Февраль 2012 - 19:10

Здравствуйте ! помогите новичку в реализации вот такой задачи:
как организовать загрузку изображения (gif, jpeg, psd) в БД, а после вывести из БД, уменьшив её пропорционально до определенного значения(например, по высоте до 300px)?
Интересует, какой тип поля в БД должен быть, как вывести из него картинку в нужном месте?
Заранее благодарю за любую оказанную помощь


$allowed_filetypes = array('.jpg','.gif','.bmp','.png'); // Здесь мы перечисляем допустимые типы файлов

$max_filesize = 524288; // Максимальный размер загружаемого файла в байтах (в данном случае он равен 0.5 Мб).

$upload_path = './files/'; // Место, куда будут загружаться файлы (в данном случае это папка 'files').

$filename = $_FILES['userfile']['name']; // В переменную $filename заносим точное имя файла (включая расширение).

$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // В переменную $ext заносим расширение загруженного файла.

// Сверяем полученное расширение со списком допутимых расширений, которые мы определили в самом начале. Если расширение загруженного файла не входит в список разрешенных, то прерываем выполнение программы и выдаем соответствующее сообщение.

if(!in_array($ext,$allowed_filetypes))
die('Данный тип файла не поддерживается.');

// Теперь проверим размер загруженного файла и если он больше максимально допустимого, то прерываем выполнение программы и выдаем сообщение.

if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
die('Фаил слишком большой.');

// Проверяем, доступна ли на запись папка, определенная нами под загрузку файлов (папка files). Если вдруг недоступна, то выдаем сообщение, что на папку нужно поставить права доступа 777.

if(!is_writable($upload_path))
die('Невозможно загрузить фаил в папку. Установите права доступа - 777.');

// Загружаем фаил в указанную папку.
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename))
{
echo 'Ваш фаил успешно загружен <a href="' . $upload_path . $filename . '">смотреть</a>';
}
else
{
echo 'При загрузке возникли ошибки. Попробуйте ещё раз.';
}

?>


вот нашел вот такой обработчик, как занести путь и названия картинки в БД??

 

 

  • 0

#2 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 19 Февраль 2012 - 20:47

так вам нужно саму картинку занести в БД или картинку на сервер, а путь к ней и имя в БД?
  • 0

#3 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 19 Февраль 2012 - 22:04

MySQL позволяет это сделать, но вот делать так крайне не желательно по нескольким причинам:
- очень велика нагрузка на сервер БД;
- лишение посетителей сайта радости кэширования, поскольку картинка в БД может храниться только в бинарной форме.
Гораздо правильнее хранить картинки в каталоге - что и делает Ваш скрипт - а в БД заносить имя картинки. При выводе картинки просто берем ее имя из БД и подставляем в путь.

как организовать загрузку изображения (gif, jpeg, psd) в БД..?
Интересует, какой тип поля в БД должен быть..?

Но если уж так хочется... Для поля с картинками выбирается подходящий BLOB-тип в зависимости от максимального размера картинки.

...после вывести из БД?

Создаем отдельный файл .php (например, get_img.php), где получаем идентификатор картинки для вывода... выбираем картинку из БД, формируем для браузера заголовок, который "скажет", что отдается не html-документ, а картинка, выводим картинку конструкцией echo. Запрос картинки из другого файла происходит, соответственно, таким образом:
<img src="get_img.php?id=1" alt="" /> <!-- идентификатор картинки -->

...уменьшив её пропорционально до определенного значения(например, по высоте до 300px)?

Ну, это уже чистый HTML... просто указывается высота картинки и браузер сам уменьшит ее пропорционально:
<img src="get_img.php?id=1" alt="" height="300" /> <!-- идентификатор картинки -->

  • 0


#4 Kdes70

Kdes70
    Topic Starter
  • Пользователь
  • 55 сообщений
  • Репутация: 0

Отправлено 20 Февраль 2012 - 01:01

файлы то я в каталоге хранить буду.
а какую переменную мне в базу надо занести из обработчика? $upload_path эту или $filename или оба ??
  • 0

#5 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 20 Февраль 2012 - 10:47

Kdes70, код же откомментирован. Файлы помещаются в каталог, указанный в переменной $upload_path. Имя файла содержится в переменной $filename. В БД достаточно заносить только имя файла... каталог для всех картинок будет одинаков, т.е. не уникален, а потому помещать еще его название в БД - излишне.
  • 0


#6 Kdes70

Kdes70
    Topic Starter
  • Пользователь
  • 55 сообщений
  • Репутация: 0

Отправлено 20 Февраль 2012 - 10:51

спасибо за ясное обьяснения)
  • 0

#7 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 20 Февраль 2012 - 11:30

Пожалуйста :blink:
  • 0



Оформление форума – IPBSkins.ru