Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Графика > Вывести картинку из базы


Автор: MaxxSoftware 14.12.2005, 06:43
СУБД: MS SQL Server 2000 EE
база такая:
(qwe)
| id:int | im:image |

вытаскиваю картинку с базы вот так вота:
Код

$link = mssql_connect("127.0.0.1","login","paswd") or die("Не могу соединиться с сервером");
mssql_select_db("qwe",$link) or die ("Hе найдена база данных.");
$res=mssql_query("SELECT im FROM qwe where id=56")
  or die("SQL ERROR in line ".__LINE__.", function mysql_query");
$image=mssql_result($res,0,0); // берем переменную из б.д.
$x = strlen($image);
header("Content-Length: $x");
header("Content-type: image/jpeg;");
echo $image;


Картинка выводится не полностью... как я понял выводится тока определенное количество пикселей.... (при том очень мало smile )

перед выводом на екран пытаюсь сохранить рисунок
Код

  $fil = fopen('c:\\1.jpg',"a");
  fwrite($fil,$image);
  fclose($fil);

Сохраняется тоже не полность....

В базе картинка лежит целиком, ибо в Делфи я ее вытаскиваю без пролем и отображаю.

Автор: Mal Hack 14.12.2005, 23:24
Правильно я понял, что глюк только в выводе на ПХП, что в Делфи картинка отображается корректно?
Какого типа поле, где хранится картинка?

Цитата(MaxxSoftware @ 14.12.2005, 06:43)
header("Content-Length: $x");

Убери. Изменения будут?

Автор: MaxxSoftware 15.12.2005, 06:52
Ага, тока при вытаскивании в ПХП, в Делфе все без проблем. Поле типа Image.

нет,все осталось без изминений, изначально етого (Content-Length) не было, посоветовали приписать.... к томуже в файл то сохраняется тоже обрезано, а ето происходит раньше определение длинны

Автор: Mal Hack 15.12.2005, 13:00
Цитата(MaxxSoftware @ 15.12.2005, 06:52)
Поле типа Image.

В ms точно есть такое поле?

Автор: Guest 15.12.2005, 14:14
Попробуй:
Код

 $fil = fopen('c:\\1.jpg',"ab");

Буква 'b' указывает, что открывается бинарный файл.

Автор: Guest 15.12.2005, 14:32
Т. е. может, echo обрезает поток данных $image на символе с кодом 0, считая его концом строки?

Автор: MaxxSoftware 15.12.2005, 15:26
Цитата(Mal @ 15.12.2005, 13:00)
В ms точно есть такое поле?

Конечно.


Цитата(Guest @ 15.12.2005, 14:14)
Буква 'b' указывает, что

тож самое, сохраняется обрезано. на страничку выводится обрезано...

Могу выложить бекаб базы и полностью код... мож кто разберется...

Автор: Mal Hack 16.12.2005, 23:30
А он у тебя режет на разных картинках одинакого или как?

Автор: MaxxSoftware 19.12.2005, 07:20
Такое ощущение что выводит тока N первых пикселей...
тоесть - да, одинаково

Есть предположения какинить?

Автор: Mal Hack 19.12.2005, 19:53
Блин... Че же я сразу-то ступил...

Цитата(MaxxSoftware @ 14.12.2005, 06:43)
$x = strlen($image);
header("Content-Length: $x");

Кто тебе сказал, что у тебя картинка - текстовая информация?
strlen тебе все портит.

Автор: MaxxSoftware 20.12.2005, 06:26
Без него точно также... к томуже как стрлен влияет на сохранение в файл??? помоему никак...
к томуже оно происходит до определения длинны....

ну ладно, а как правельно то? (если просто убрать strlen и контент-ленг - то результат тотже)

Автор: Mal Hack 20.12.2005, 20:54
На файл не влияет. Другой вопрос в том, что он мог обрезать. Размер по тексту не равен ращзмеру по битам графического файла.

Цитата(MaxxSoftware @ 14.12.2005, 06:43)
$image=mssql_result($res,0,0); // берем переменную из б.д.

Попробуй считать по другому.

Автор: MaxxSoftware 21.12.2005, 06:44
Например как?
я вот так вот ышо попробовал

Код

$image = mssql_fetch_assoc($res);
$fil = fopen('c:\\1.jpg',"a");
fwrite($fil,$image['im']);
fclose($fil);
header("Content-type: image/jpg;");
echo $image['im'];


результат тотже

Автор: MuToGeN 21.12.2005, 10:16
ИМХО тут копать надо в сторону MSSQL, скорее всего какой-то баг в связи MSSQL <=> PHP. Например, законнектиться к ней не напрямую, а через ODBC. Как вариант, попробывать обновить PHP.

Автор: MaxxSoftware 21.12.2005, 14:46
пробовал на 4 PHP и на 5,11 результат тотже

Чрез оДБЦ

Код

<?php
$link = odbc_connect("DRIVER={SQL Server};SERVER=localhost;DATABASE=qwe","login","paswd") or die("Не могу соединиться с сервером");
$res= odbc_exec($link,"SELECT im FROM qwe where id=57");
$image = odbc_result($res,1);
header("Content-type: image/jpeg;");
echo $image;
?>


Результат тот же

Автор: Mal Hack 21.12.2005, 16:25
Цитата(MaxxSoftware @ 21.12.2005, 06:44)
$fil = fopen('c:\\1.jpg',"a");

wb попробуй,

Автор: MaxxSoftware 22.12.2005, 06:31
т о ж е с а м о е

Автор: Mal Hack 22.12.2005, 12:42
Вместо echo print пробовал?

Автор: MaxxSoftware 23.12.2005, 06:24
Теперь - да, не помогает...

Автор: Mal Hack 23.12.2005, 19:51
Судя по всему косяк в библиотеке, или глюк самого ПХП. На другом сервере пробовал?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)