Добрый день! Появилась нужда достать из БД MSSQL (одна из таблиц AX) достать изображение. В базе оно хранится как BLOB. В сети только примеры работы с BLOB из бд Mysql. Может кто-нибудь сталкивался с подобной проблемой? Вот примеры кода. 1 файл - listImages.php PHP: echo "<img src='imageView.php?id=5637151828'>"; // id = id картинки в бд 2 файл - imageView.php PHP: mssql_connect('host', 'User', 'Password'); mssql_select_db($dbname); $ID = $_GET['id']; $sql = "SELECT * FROM DOCUVALUE WHERE RECID ='".$ID."'"; $result = mssql_query($sql); $row = mssql_fetch_assoc($result); header("Content-type: image/jpeg"); echo $row["FILE_"];
Ну код на адекватный похож. Не работает? Что пишет? Хотя обычно рекомендуется хранить картинки файлами, а в базе - только имена файлов. Поскольку статические файлы сервер может отдавать быстрее
Что нормально для персональной базы типа мс аксес, то как-то странно на многопользовательской. По коду: подозреваю, что тело картинки надо ещё как-то декодировать. Наверное оно как строка с эскейпами или бэйс64.
я бы для начало тогда, посоветовал бы сделать вар дамп - $row (( : это поможет снять многие головные боли...
Полностью согласна. но наше предприятие использует MS Dynamics. А для нее есть веб-сервис. И все данные теперь должны браться с mssql, а не с mysql. А табличка с картинками аксаптовская и очень желательно пользоваться именно ею. Когда вывод таким образом данные, то вылезают крякозябры. Ошибок никаких не выдает.
оффтопик: только не надо echo var_dump(). достаточно просто var_dump() оффтопик: как такая маленькая картинка отвратительного качества может занимать 214к, я недоумеваю содержимое похоже на правду. а что получается если открыть прямую ссылку на картинку и сохранить в файл? первые байты какие? может там ворнинг какой встрался или BOM… --- Добавлено --- p.s. по идее сохраненный файл должен быть в точности 29051 байт. --- Добавлено --- иное укажет на лишний мусор в выводе.
Вставила адрес и браузер предложил сохранить файл в формате html. --- Добавлено --- Открыла данный файл с помощью Hex Editor.
Вывод явно не скрипта, приведённого в "2 файл - imageView.php". imageView что-ли не напрямую вызывается? Что там за <html> такой? Это раз. Два, var_dump - это было для отладки, в рабочем скрипте должно быть echo
судя по всему, твой заголовок content-type не работает. такое происходит когда перед ним случается какой-то вывод. например когда перед первым <?php стоит пустая строка или невидимый обычно символ BOM. что можно сделать: - открыть файл скрипта в нормальном редакторе и сохранить в варианте " utf-8 без BOM" - временно включить вывод ВСЕХ ошибок и предупреждений чтобы сам php указал нам где возникла проблема. http://phpfaq.ru/debug - попробовать открыть "картинку" снова и заглянуть внутрь
Спасибо большущее за помощь! =) Я разобралась. Вот код. PHP: $sql = "SELECT FILE_ FROM db WHERE id ='".$ID."'"; $result = mssql_query($sql); $row = mssql_fetch_assoc($result); header("Content-type: image/jpeg"); echo substr_replace($row['FILE_'], null, 0, 7); В общем, т.к. это аксаптийное поле, то мы убираем первые 6 символов и просто выводим. Але оп! =)