|
|
|
| У меня есть база интернет магазина в формате mdb (MS Access, если кто не знает). В таблице с товарами есть поле типа "Поле объекта OLE", в котором хранится картинка. В PHP при выборке из БД данные в этом поле имеют вид: "151C33000200000011000E0014002500... и так ещё 610000 символов". var_dump говорит что это строка.
<?
$dsn = 'odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\magazin\\db.mdb;Uid=Admin';
try {
$dbh = new PDO($dsn);
$q = $dbh->query('SELECT * FROM VID_TOVARA');
//print_r($dbh->errorInfo());
$q->setFetchMode(PDO::FETCH_ASSOC);
$one = $q->fetch();
print var_dump($one['Foto']);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
|
Шаманские махинации вроде createimagefromstring() или прямой вывод со всякими заголовками Content-Type ни к чему не привёл.
Что делать? Подозреваю что нужно сделать что-то типа такого:
<?
//...
$img = new COM('Ole.Image');
$img->GetFromString($one['Foto']);
$img->FetchToOutput();
| Но этот код, конечно же, не работает.
Сразу оговорюсь что перенос данных на другую СУБД или изменение типа поля не приемлемы. | |
|
|
|
|
|
|
|
для: Саня
(28.04.2009 в 20:25)
| | вывели бы эту строку в файл и прикрепили бы в архиве к посту.
Понятно, что она закодирована и в лоб её толкать в GD2 смысла нет. | |
|
|
|
|
 595.7 Кб |
|
|
для: Trianon
(28.04.2009 в 21:30)
| | Я полагаю что это сериализованный OLE объект. | |
|
|
|
|
|
|
|
для: Trianon
(28.04.2009 в 21:30)
| | Никаких идей? | |
|
|
|
|
|
|
|
для: Саня
(01.05.2009 в 10:45)
| | у меня - нет. | |
|
|
|
|
|
|
|
для: Саня
(01.05.2009 в 10:45)
| | тоесть это изображение должно быть?
насколько я помню, изображения считаются бинарными данными, а у вас 16-ричные... | |
|
|
|
|
|
|
|
для: nikita2206
(01.05.2009 в 13:13)
| | Если бы они были записаны в базу в бинарном формате, то никаких проблем. Но в первом посте я написал что это OLE-объект. | |
|
|
|
|
 297.9 Кб |
|
|
для: Саня
(28.04.2009 в 20:25)
| | Кое что прояснилось. Мне тут подсказали:
<?
$str = preg_replace_callback ("([a-zA-Z0-9]{2})", create_function ('$matches', 'return chr (hexdec ($matches[0]));'), $str);
|
Среди бинарных данных плавают "Точечный рисунок" и "Paint.Picture". Значит разгадка где-то близко.
Помимо всего прочего попробовал PEAR::OLE, но тоже не помогло. | |
|
|
|
|
|
|
|
для: Саня
(05.05.2009 в 18:36)
| | OLE, это же контейнер, значит надо сперва получить рисунок из контейра как-то, а он получается содержится в каком-то внутреннем формате.... что-то не видно в тексте заголовков знакомых. | |
|
|
|
|
 21.1 Кб |
|
|
для: sim5
(05.05.2009 в 19:17)
| | sim5, пардон, промахнулся....
Саня:
такой чтоли рисунок?
bmp-файл там начиная с символов BM и далее... | |
|
|
|
|
|
|
|
для: Trianon
(06.06.2009 в 16:55)
| | Красивая печка :) Не знаю, я же не создавал этого объекта, спросите у Сани :)
PS. Да, видел я там BMNS - а дальше смотреть поленился, пудумав, что это нечто свое из формата.) | |
|
|
|
|
|
|
|
для: Саня
(05.05.2009 в 18:36)
| | Мучаюсь с такой же проблемой, нужно срочно найти решение...
Нагуглено, что есть хеадер в оле длиной 78 байт. Но даже если отрезать эти 78 байт, то ничего не получается...
Был вариант отображать изображения как встроенный object с типом application/x-oleobject...
Если найдете решение, поделитесь, пожалуйста! | |
|
|
|
|
|
|
|
для: tan4eg
(06.06.2009 в 16:35)
| | после этих 78 байт идут 4 байта, которые очень напоминают длину оставшегося куска в шестнадцатеричных цифрах. А после них - BMP. | |
|
|
|
|
|
|
|
для: Trianon
(06.06.2009 в 17:03)
| | вот так они подготавливают картинку в асп. по идее, то же самое должно работать в пхп, ничего магического они не делают.... но не работает :(
function SetImageForDisplay(field, contentType)
OLEHEADERSIZE = 78
contentType = LCase(contentType)
Select Case contentType
Case "gif", "jpeg", "bmp"
contentType = "image/" & contentType
bytes = field.value
Case "ole"
contentType = "image/bmp"
nFieldSize = field.ActualSize
oleHeader = field.GetChunk(OLEHEADERSIZE)
bytes = field.GetChunk(nFieldSize - OLEHEADERSIZE)
End Select
Session("ImageBytes") = bytes
Session("ImageType") = contentType
End function
|
| |
|
|
|
|
|
|
|
для: Саня
(05.05.2009 в 18:36)
| | Месяц назад меня изрядно смутило то обстоятельство, что помимо шестнадцатеричного кода в потоке встречаются мелкие двоичные вкрапления....
Очевидно, либо они что-то означают, а я не знаю, что именно.
Либо экспорт формата уже был проведен с нарушениями.
И то и другое, понятное дело, правильный ответ только перечеркнуть может. | |
|
|
|
|