Недавно столкнулась с такой проблемой - надо было организовать работу с БД Access через php. Извращение в чистом виде, особенно, если учесть, что в бд были столбцы типа OLE, в которых хранились картинки. А эти картинки надо было отображать на странице. Долго искала решение, но так нигде и не нашла.
На одном из сайтов прочитала, что при сохранении картинки в столбец OLE Аксес добавляет заголовок. О длине этого заголовка точно известно не было - в одном месте утверждали, что он 78 байт, в другом - что зависит от региональных настроек. Час от часу не легче....
На самом деле, как показала практика, фиксированной длины у этого заголовка нет.
В итоге всех моих поисков, методом тыка я нашла собственное решение. И оно оказалось элементарно просто!!! В базе, с которой пришлось мне работать, все картинки были в основном в bmp-формате, поэтому я приведу пример кода для конкретного случая.
И так, для начала нужно подключиться к бд с помощью odbc (более подробно как сделать это описано тут):
$connection = odbc_connect( $dsn, $user, $pwd);
Далее делаем запрос на выборку поля с картинкой:
$result = odbc_exec($connection, "Select Foto From Users Where UserID=1");
Теперь надо извлечь данные. Тут есть одна тонкость. Так как картинка больше 4096 байт (это длина данных , возвращаемая по умолчанию для LONG столбцов ), то нужно указать, что хотим, нет, даже требуем! чтобы нам передали большее количество данных с помощью функции odbc_longreadlen:
if ($result!== FALSE)
{
odbc_longreadlen($result, 1048576);
odbc_fetch_row($result, 0);
$data = odbc_result($result, "Foto");
Стандартный bmp начинается со символов "BM". Так как Аксес добавляет свой заголовок к данным файла и в нем могут встречатится такое же сочетание букв, то искать начало нашей картинки будем после фразы "PBrush", которая находится в конце заголовка, который добавляет аксес. Дело за малым, осталось из полученных данных вырезать картинку и отправить ее в браузер:
$data = substr($data, strpos($data, "BM", strpos($data, "PBrush")));
header("Content-type: ".image_type_to_mime_type(IMAGETYPE_BMP));
echo $data;
exit;
}
Для форматов gif, png, jpeg понадобиться только искать соответствующий формату заголовок.
Для изображений, который были сохранены с отметкой Microsoft PhotoEditor 3.0, я так решения и не нашла :(
Как вытащить картинку из поля OLE из Access
Подписаться на:
Комментарии к сообщению (Atom)
Ярлыки
.net
(17)
.net framework
(4)
256
(1)
армагедон
(1)
Библиотека
(12)
видео
(1)
вконтакте
(1)
декомпилятор
(1)
задачки
(5)
итоги
(1)
кодировка
(1)
космос
(1)
маркет
(1)
монетизация
(2)
мысли в слух
(10)
обфускация
(1)
Оптимизация сайта
(1)
отдых
(3)
Ошибка 720
(1)
переводы
(5)
подкасты для разработчика
(3)
прибыль
(1)
приложение
(2)
Разное
(28)
разработка ПО
(31)
рефакторинг
(5)
скачивания
(1)
ссылки
(2)
статистика
(1)
юмор
(31)
Access
(1)
admin2012.ru
(1)
admob
(1)
AMD
(1)
android
(6)
android conventions
(1)
android studio
(1)
angular.js
(1)
ant
(1)
antipattern
(1)
atdd
(2)
autocomplete
(1)
backbone.js
(1)
background repeat
(1)
batch file
(1)
batman.js
(1)
bdd
(3)
bootstrap
(1)
bug
(1)
build
(1)
C#
(31)
clojurescript
(1)
codeigniter
(1)
coding style
(1)
coffeescript
(3)
components
(1)
css
(1)
Custom splash screen
(1)
DDD
(1)
DI
(1)
eclipse
(1)
facebook
(1)
gradle
(1)
hot keys
(1)
html
(4)
ide
(1)
IE
(4)
IE8
(2)
IoC
(6)
ion auth
(1)
jasmine
(1)
java
(3)
javas
(1)
javascript
(9)
jquery
(4)
jquery ui
(1)
justify
(1)
knockout.js
(2)
linq
(3)
localDB
(1)
massive
(1)
micro orm
(1)
mocha
(1)
mock
(1)
mono
(1)
monodroid
(1)
moq
(2)
mpress
(1)
ms sql ce
(8)
msswit2013
(2)
mvc framework
(1)
mysql
(2)
NetBeans
(1)
nodejs
(1)
nosql
(1)
npm
(1)
object db
(1)
opera apps
(1)
ORM
(2)
phonegap
(1)
php
(12)
phpunit
(3)
play market
(2)
qunit
(1)
RegExpr
(2)
require.js
(1)
samsung apps
(2)
screenshoot
(1)
sdk
(1)
Shortcut
(1)
Silverlight
(4)
singleton
(1)
slide me
(1)
soap
(2)
social network
(1)
spellcheck
(1)
SpicIE
(1)
sql
(3)
sqlite
(4)
style
(1)
SublimeText 2
(5)
Super Mario
(1)
svn
(1)
tdd
(14)
tddigest
(5)
testing
(7)
text align
(1)
Tools
(18)
torrents.ru
(1)
tortoisesvn
(1)
twitter
(1)
uml
(1)
unit testing
(5)
unity
(3)
usability
(2)
virus
(1)
visual studio
(7)
web services
(2)
Windows 7
(1)
xunit
(3)
ZenCoding
(2)
Копирайты
Авторские права на публикуемые материалы (кроме тех материалов, где явно указан источник) принадлежат автору блога (мне) и могут быть использованы где-либо еще только с моего согласия.
Блог о жизни вне кода
Постоянные читатели
Популярно
-
Понравился анекдот о колбасе и яйцах :) Жена посылает мужа-программиста в магазин: - Дорогой, купи, пожалуйста, палку колбасы, и если б...
-
Продолжаю серию постов о своём первом андроид-приложении. Сегодня мысли о публикации приложения в разных маркетах.
-
Бета-версия одиннадцатой cтудии вызвала много охов и ахов. Чтобы там ни говорили, работать в ней приятно, хоть по началу немного необычно. ...
-
Перевод поста "Top 10 Things That Annoy Programmers" Кевина Панга. Оригинал тут
-
Jquery.Inputmask - крутой (да-да, именно) плагин, добавляющий гибкости в работу с обычным текстовым полем для ввода. Плагин является ус...
-
Разделяй и влавствуй - подход на все времена. Концепция модульного программирования не нова, и хорошо себя зарекомендовала. В мире разрабо...
-
Фридман А.Л. - Основы объектно-ориентированной разработки программных систем. ( скачать ) Книга написана как учебное пособие для студентов ...
-
Steve Freeman, Nat Pryce. Growing Object-Oriented Software, Guided by Tests ( скачать ) Test-Driven Development (TDD) is now an established...
-
Для некоторых методов класса Microsoft Code Analysis даёт такой совет: CA1822 : Microsoft.Performance : The 'this' parameter (or ...
0 коммент.:
Отправить комментарий