За последние 24 часа нас посетили 18884 программиста и 1625 роботов. Сейчас ищут 947 программистов ...

Проблема с отображением BLOB-картинки из БД MSSQL

Тема в разделе "PHP для новичков", создана пользователем lightburst7, 22 апр 2016.

Метки:
  1. lightburst7

    lightburst7 Новичок

    С нами с:
    22 апр 2016
    Сообщения:
    4
    Симпатии:
    0
    Добрый день!

    Появилась нужда достать из БД MSSQL (одна из таблиц AX) достать изображение.
    В базе оно хранится как BLOB. В сети только примеры работы с BLOB из бд Mysql.
    Может кто-нибудь сталкивался с подобной проблемой?

    Вот примеры кода.
    1 файл - listImages.php

    PHP:
    1.     echo "<img src='imageView.php?id=5637151828'>"; // id = id картинки в бд
    2 файл - imageView.php

    PHP:
    1. mssql_connect('host', 'User', 'Password');
    2. mssql_select_db($dbname);
    3. $ID = $_GET['id'];
    4. $sql = "SELECT * FROM DOCUVALUE WHERE RECID ='".$ID."'";
    5. $result = mssql_query($sql);
    6. $row = mssql_fetch_assoc($result);
    7. header("Content-type: image/jpeg");
    8. echo $row["FILE_"];
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну код на адекватный похож. Не работает? Что пишет? Хотя обычно рекомендуется хранить картинки файлами, а в базе - только имена файлов. Поскольку статические файлы сервер может отдавать быстрее
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Что нормально для персональной базы типа мс аксес, то как-то странно на многопользовательской.

    По коду: подозреваю, что тело картинки надо ещё как-то декодировать. Наверное оно как строка с эскейпами или бэйс64.
     
    p@R@dox 55RU нравится это.
  4. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    на то оно и BLOB
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Короче говоря, смотри что там реально и делай выводы.
     
  6. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    я бы для начало тогда, посоветовал бы сделать вар дамп - $row (( :
    это поможет снять многие головные боли...
     
  7. lightburst7

    lightburst7 Новичок

    С нами с:
    22 апр 2016
    Сообщения:
    4
    Симпатии:
    0
    Полностью согласна. но наше предприятие использует MS Dynamics. А для нее есть веб-сервис. И все данные теперь должны браться с mssql, а не с mysql. А табличка с картинками аксаптовская и очень желательно пользоваться именно ею.

    Когда вывод таким образом данные, то вылезают крякозябры. Ошибок никаких не выдает.
     

    Вложения:

    • vardump.jpg
      vardump.jpg
      Размер файла:
      214,1 КБ
      Просмотров:
      6
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    оффтопик: только не надо echo var_dump(). достаточно просто var_dump() :D
    оффтопик: как такая маленькая картинка отвратительного качества может занимать 214к, я недоумеваю

    содержимое похоже на правду. а что получается если открыть прямую ссылку на картинку и сохранить в файл? первые байты какие? может там ворнинг какой встрался или BOM…
    --- Добавлено ---
    p.s. по идее сохраненный файл должен быть в точности 29051 байт.
    --- Добавлено ---
    иное укажет на лишний мусор в выводе.
     
  9. lightburst7

    lightburst7 Новичок

    С нами с:
    22 апр 2016
    Сообщения:
    4
    Симпатии:
    0
    Вставила адрес и браузер предложил сохранить файл в формате html.
    --- Добавлено ---
    Открыла данный файл с помощью Hex Editor.
     

    Вложения:

  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Вывод явно не скрипта, приведённого в "2 файл - imageView.php". imageView что-ли не напрямую вызывается? Что там за <html> такой? Это раз. Два, var_dump - это было для отладки, в рабочем скрипте должно быть echo :)
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    судя по всему, твой заголовок content-type не работает. такое происходит когда перед ним случается какой-то вывод. например когда перед первым <?php стоит пустая строка или невидимый обычно символ BOM.

    что можно сделать:
    - открыть файл скрипта в нормальном редакторе и сохранить в варианте "
    utf-8 без BOM"
    - временно включить вывод ВСЕХ ошибок и предупреждений чтобы сам php указал нам где возникла проблема. http://phpfaq.ru/debug
    - попробовать открыть "картинку" снова и заглянуть внутрь
     
    lightburst7 нравится это.
  12. lightburst7

    lightburst7 Новичок

    С нами с:
    22 апр 2016
    Сообщения:
    4
    Симпатии:
    0
    Спасибо большущее за помощь! =) Я разобралась. Вот код.

    PHP:
    1.     $sql = "SELECT FILE_ FROM db WHERE id ='".$ID."'";
    2.     $result = mssql_query($sql);
    3.     $row = mssql_fetch_assoc($result);
    4.  
    5.     header("Content-type: image/jpeg");
    6.     echo substr_replace($row['FILE_'], null, 0, 7);
    В общем, т.к. это аксаптийное поле, то мы убираем первые 6 символов и
    просто выводим. Але оп! =)