За последние 24 часа нас посетили 18065 программистов и 1635 роботов. Сейчас ищут 1682 программиста ...

Ввод картинок в БД MySQL и их вывод

Тема в разделе "Вопросы от блондинок", создана пользователем mark2008, 24 янв 2008.

Статус темы:
Закрыта.
  1. mark2008

    mark2008 Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    Итак, что дано:

    1. Код для загрузки картинки:
    PHP:
    1.  
    2.  <form method="post" action="photo_manager.php?action=upload" enctype="multipart/form-data">
    3.   <input type="file" name="pht">
    4.   <input type="submit" name="upl" value="Çàãðóçèòü">
    5.  </form>
    6. <?php
    7.     require ("../classes/class_db.php");
    8.     $db = new db();
    9.     $db->db_select();
    10.  
    11. if (isset($_POST["upl"]))
    12. {
    13.     $type =  substr($_FILES['pht']['type'], 0, 5);
    14.     if ($type !== "image") die();
    15.  
    16.     $size = round($_FILES["pht"]["size"]/1000, 2);
    17.     if ($size > 500.00) die();
    18.  
    19.  
    20.     $file = file_get_contents($_FILES["pht"]["tmp_name"]);
    21.     $file = mysql_escape_string($file);
    22.  
    23.     $db->query("INSERT INTO menu_photos (item_parent_id, item_photo) VALUES (1, '$file')");
    24.     echo mysql_error();
    25.  
    26. }
    27.  
    2. Код для вывода картинки:
    PHP:
    1.  
    2. $q = $db->query("SELECT item_photo FROM menu_photos WHERE item_parent_id = 1");
    3. $r = mysql_result($q, 0, "item_photo");
    4. header("Content-type: image/bmp");
    5. echo $r;
    6.  
    Проблема в коде для вывода.
    1. Если не добавить заголовок Content-type, то выводятся бинарные символы.
    2. Если добавить вот это: header("Content-type: image/*") то предлагается открыть файл *.php
    3. Если добавить заголовок header("Content-type: image/bmp") (bmp - формат загружаемой картинки)- то вижу сообщение что "файл ... не может быть показан так как содержит ошибки.

    Как всё-таки правильно будет осуществлять загрузку и выгрузку изображений из БД? :)[/php]
     
  2. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    1. Хранить картинки в базе вообще плохая идея.
    2. Использовать формат bmp - идея очень плохая. Есть сжатие без потери качества: PNG.

    PHP:
    1. <?php
    2. $type =  substr($_FILES['pht']['type'], 0, 5);
    3.     if ($type !== "image") die();
    4. ?>
    5.  
    Здесь $_FILES['pht']['type'] чему равен? Точно image/bmp?
     
  3. mark2008

    mark2008 Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    AlexGousev
    Я всё знаю про эти "плохие идеи" :)
    Во-первых хранить картинки в базе - не моя прихоть. Это раз.
    Во-вторых формат bmp я использую только для тестовых целей. В реальности будет либо jpg либо gif.
    $_FILES['pht']['type'] стопроцентно равно "image/bmp".
     
  4. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2. $q = $db->query("SELECT item_photo FROM menu_photos WHERE item_parent_id = 1");
    3. $r = mysql_result($q, 0, "item_photo");
    4. file_put_contents('image.bmp', $r);
    и посмотри потом в любом граф. редакторе.
     
  5. mark2008

    mark2008 Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    Странно... работает... но это получается, что я вывожу уже совершенно конкретное изображение. А почему же не удаётся вывести из базы? В смысле не таким образом, а конкретно послать на устройство вывода то, что имеется в базе...
     
  6. mark2008

    mark2008 Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    Смысл хранения картинок в базе - чтобы не создавать дополнительные изображения на диске. Если я буду каждый раз делать таким образом, во-первых увеличится нагрузка на сервер, во-вторых весь смысл теряется.
     
  7. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Есть ссылка, по которой можно видеть работу скрипта? Только уберите эту строчку:
    PHP:
    1. header("Content-type: image/bmp");
     
  8. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    полный бред.
     
  9. mark2008

    mark2008 Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    Обоснуй.
     
  10. mark2008

    mark2008 Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    AlexGousev
    Если я уберу эту строчку с заголовком, выведется бинарный текст.
     
  11. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Что именно?!


    Вот это надо обосновывать, как и любую бессмысленную кракозябру.
    Что откуда и куда СОЗДАВАТЬ? "нагрузка на сервер" - это не заклинание и повод, а вполне осмысленная вещь, при чем тут это?
     
  12. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    в этом НЕТУ смысла.
    =)
     
  13. mark2008

    mark2008 Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    Хорошо.
    Я храню изображения в базе для того, чтобы не создавать лишние файлы на диске. Да и, собственно, не я это делаю, не моя это прихоть. Это раз.

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

    По поводу нагрузки на сервер. Представьте, что ежедневно пользователь закачивает в базу около сотни картинок. Потом ему их надо просмотреть. Да, ещё кроме этого администратора, который этим занимается, существуют пользователи. Причём их достаточно много. Естественно, что хостинг виртуальный, на котором выделяеюся очень лимитированные процессорные ресурсы. Если 100 человек в день будут грузить туда-сюда 100 картинок - с базы на диск и обратно - мало не покажется ни хостеру ни, соответственно, пользователям.

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

    mark2008 Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    Слушай, 440Hz! Я всё понимаю! :) Сам матерюсь! Но это НЕ МОЯ прихоть!!!
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    лана. проехали. так в чем проблема-то?
     
  16. mark2008

    mark2008 Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    В том, что вместо изображения выводится либо бинарный текст либо вот это:
    Изображение “http://*.../photo_manager.php” не может быть показано, так как содержит ошибки. :lol: :lol: :lol:
     
  17. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    mark2008

    так картинка бъется рпи записи? тебе ж сказали что надо сохранить на диск и проверить где там что бъется
     
  18. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Именно на него и интересно посмотреть.
     
  19. mark2008

    mark2008 Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    Хе... проблема решена.... ))) самым извращённым способом, который только существует! :))))))))
     
  20. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ну и? покажи? извращенец...
    =)
     
  21. mark2008

    mark2008 Активный пользователь

    С нами с:
    23 янв 2008
    Сообщения:
    16
    Симпатии:
    0
    ну щас! разбежался, прям взял и показал )))))))))))))
     
  22. Anonymous

    Anonymous Guest

    убейте этого идиота.
     
  23. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Куда стрелять?
     
  24. Anonymous

    Anonymous Guest

    В яйца, чтоб они не плодились.
     
  25. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Горбунов Олег
    Дадим ему ещё один шанс, а если не исправится, перевалим самым жестоким способом.
     
Статус темы:
Закрыта.