[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сохранение картинки
Воитель
Есть у меня переменная в php:
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();

Это из работы с 1С
1Сники утверждают что у меня в этой переменной двоичные данные картинки
Распечатать такую переменную не получается ошибка
Object of class variant could not be converted to string

Пробовал прибавить пустую строку: $gruppa .=''; что бы перевести из одного типа данных в другой. Результата ни какого не дало.

Мне нужно сохранить эту картинку в файл
  $file = fopen ("file.jpeg","w");
$str = "Hello, world!";
if ( !$file )
{
echo("Ошибка открытия файла");
}
else
{
fputs ( $file, $gruppa);
}
fclose ($file);


Но понятное дело что не получается, так как у меня какой-то объект.
И что-то я не разберусь что делать.
По поводу двоичных данных есть пара функций в php но как мне показалось что они мне не помогут.



Спустя 6 минут, 23 секунды (22.11.2011 - 09:15) Invis1ble написал(а):
двоичные данные - такого типа нет в php.
если это объект - то у него наверняка есть какой-то метод, который возвращает данные. Либо публичное свойство.

Спустя 19 минут, 29 секунд (22.11.2011 - 09:34) linker написал(а):
var_dump($gruppa);
и посмотреть что там внутри. Либо открыть скрипт с описанием класса variant и посмотреть его реализацию.

Спустя 5 минут, 40 секунд (22.11.2011 - 09:40) Воитель написал(а):
Цитата (linker @ 22.11.2011 - 11:34)
var_dump($gruppa);

string(0) ""

Спустя 5 минут, 4 секунды (22.11.2011 - 09:45) Воитель написал(а):
Цитата (Invis1ble @ 22.11.2011 - 11:15)
двоичные данные - такого типа нет в php.
если это объект - то у него наверняка есть какой-то метод, который возвращает данные. Либо публичное свойство.

По идеи метод
Получить()
Как раз таки и возвращает картинку.
1Сники свой аналог переменной $gruppa вставляют в какие-то формы, типа там лежит картинка

У меня ещё есть такой код из 1С:
	КаталогФайла = "D:\WebServers\home\4atrix\www\cron";
Картинка = ОсновноеИзображение.Хранилище.Получить();
Если ТипЗнч(Картинка) = Тип("Картинка") Тогда
Картинка.Записать(КаталогФайла + "\" + К + ".jpg");
КонецЕсли;


Этот код записывает картинку в файл.

Спустя 6 минут, 11 секунд (22.11.2011 - 09:51) Воитель написал(а):
Цитата (Воитель @ 22.11.2011 - 11:40)
Цитата (linker @ 22.11.2011 - 11:34)
var_dump($gruppa);

string(0) ""

Вот такой вывод, прошлый ошибочный.
object(variant)#7 (0) { }

Спустя 7 минут, 56 секунд (22.11.2011 - 09:59) Воитель написал(а):
Попробовал функцию variant_abs();
Сломал апач

Спустя 5 минут (22.11.2011 - 10:04) linker написал(а):
variant - это класс, его реализацию можно посмотреть в каком-нибудь скрипте, либо читаем про Reflection. Но по логике $gruppa->save('путь к файлу'), может и получится.

Спустя 4 минуты, 57 секунд (22.11.2011 - 10:09) Воитель написал(а):
Call to a member function save() on a non-object

Спустя 5 минут, 53 секунды (22.11.2011 - 10:15) Invis1ble написал(а):
тебе же написали, изучи реализацию класса

Спустя 5 минут, 53 секунды (22.11.2011 - 10:21) linker написал(а):
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();
$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r($reflection->getMethods(), true) . '</pre>';

Спустя 11 минут, 3 секунды (22.11.2011 - 10:32) Воитель написал(а):
Цитата (linker @ 22.11.2011 - 12:21)
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();
$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r($reflection->getMethods(), true) . '</pre>';

Fatal error: Uncaught exception 'ReflectionException' with message 'Class does not exist' in Z:\home\4atrix\www\1s_svoyo.php:117 Stack trace: #0 Z:\home\4atrix\www\1s_svoyo.php(117): ReflectionClass->__construct('') #1 {main} thrown in Z:\home\4atrix\www\1s_svoyo.php on line 117

Я и сам читаю и рыскаю по инету, просто тема для меня практически незнакома.

Спустя 5 минут, 7 секунд (22.11.2011 - 10:37) linker написал(а):
Теперь я что-то не понимаю, то $gruppa объект, то не объект.

Спустя 5 минут, 46 секунд (22.11.2011 - 10:43) Воитель написал(а):
Это видимо из-за того что он получается из COM соединения.

Я уже пробовал как-то узнать все методы этого объекта, на чём конечно обломился. Лично для себя всё свалил не на свои неумелые руки а на com соединение )

Спустя 3 минуты, 32 секунды (22.11.2011 - 10:46) Воитель написал(а):
Часть темы из 1С форума:

Я->
Пока у меня вот так:
$gruppa_1 = $selection->ОсновноеИзображение->ИмяФайла;
$gruppa_2 = $selection->ОсновноеИзображение->Хранилище->Получить();

Это из php.
переменная $gruppa_1 выводит мне имя файла
а вот переменная $gruppa_2 является почему-то объектом.
Если бы это был сам jpeg у меня бы на экране вывелась куча символов.

От сюда вопрос что у меня в этой переменной?

Насколько понял её аналог в 1с вставляют в формы и поэтому мне кажется это какой-то специфический объект. Так как же мне взять картинку?

Чел1->
в этой переменной у вас двоичные данные.

Чел2->
Посмотрите байтовое содержимое. Какая нибудь известная сигнатура рисунка в начале есть?
Если нет, то чтобы не гадать, какой формат получается на выходе - проще будет картинку из 1С сохранить во внешний файл, а потом уже из пхп этот внешний файл загрузить.

Спустя 2 минуты, 48 секунд (22.11.2011 - 10:49) Воитель написал(а):
$gruppa = $selection->ОсновноеИзображение;
//$gruppa .='';

$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r($reflection->getMethods(), true) . '</pre>';


Вернуло:
<pre>Array
(
)
</pre>

Спустя 28 минут, 54 секунды (22.11.2011 - 11:18) linker написал(а):
$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r($reflection->getProperties(), true) . '</pre>';
а вообще сразу
$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r(Reflection::export($reflection), true) . '</pre>';

Спустя 2 минуты, 36 секунд (22.11.2011 - 11:21) Воитель написал(а):
$gruppa = $selection->ОсновноеИзображение;
$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r(Reflection::export($reflection), true) . '</pre>';
var_dump($gruppa);


Вернуло:
Class [ class variant ] { - Constants [0] { } - Static properties [0] { } - Static methods [0] { } - Properties [0] { } - Methods [0] { } }

object(variant)#8 (0) { }

Спустя 2 минуты, 26 секунд (22.11.2011 - 11:23) Воитель написал(а):
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();

$reflection = new ReflectionClass(get_class($gruppa));
echo '<pre>' . print_r(Reflection::export($reflection), true) . '</pre>';

var_dump($gruppa);




Fatal error: Uncaught exception 'ReflectionException' with message 'Class does not exist' in Z:\home\4atrix\www\1s_svoyo.php:118 Stack trace: #0 Z:\home\4atrix\www\1s_svoyo.php(118): ReflectionClass->__construct('') #1 {main} thrown in Z:\home\4atrix\www\1s_svoyo.php on line 118

Спустя 1 минута, 29 секунд (22.11.2011 - 11:25) linker написал(а):
Клёва, я бы уже давно в сорцах порылся.
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();
echo $gruppa;

Спустя 4 минуты, 36 секунд (22.11.2011 - 11:29) Воитель написал(а):
Цитата (linker @ 22.11.2011 - 13:25)
Клёва, я бы уже давно в сорцах порылся.
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();
echo $gruppa;

Catchable fatal error: Object of class variant could not be converted to string in Z:\home\4atrix\www\1s_svoyo.php on line 117

117 строка это
echo $gruppa;

Спустя 50 минут, 34 секунды (22.11.2011 - 12:20) Воитель написал(а):
Появилась некоторая новая инфа с форума 1С:

Попробуйте использовать метод ПолучитьДвоичныеДанные().
Т.е. так:
Код

$gruppa_2 = $selection->ОсновноеИзображение->Хранилище->Получить()->ПолучитьДвоичныеДанные();



и посмотрите что будет в $gruppa_2.


А как сохраняете?
Думаю как-то так должно быть:

$gruppa_2 = $selection->ОсновноеИзображение->Хранилище->Получить();
$gruppa_2->Записать(<здесь путь>);

Спустя 3 минуты, 28 секунд (22.11.2011 - 12:23) Воитель написал(а):
Но на метод
ПолучитьДвоичныеДанные()
и на
Записать(<здесь путь>)

У пхп похожий ответ:
Fatal error: Call to undefined method variant::ПолучитьДвоичныеДанные() in Z:\home\4atrix\www\1s_svoyo.php on line 116

Спустя 1 час, 14 минут, 35 секунд (22.11.2011 - 13:38) linker написал(а):
Тут можно гадать веки вечные, открой сорцы и посмотри какие методы есть у класса variant. 1С со своими кириллическими названиями отжигает по полной - дебилы.

Спустя 13 минут, 31 секунда (22.11.2011 - 13:51) Invis1ble написал(а):
Цитата
1С со своими кириллическими названиями отжигает по полной - дебилы.

+100500

Спустя 24 минуты, 44 секунды (22.11.2011 - 14:16) Воитель написал(а):
Цитата (linker @ 22.11.2011 - 15:38)
Тут можно гадать веки вечные, открой сорцы и посмотри какие методы есть у класса variant. 1С со своими кириллическими названиями отжигает по полной - дебилы.

unsure.gif что такое сорц ?

Спустя 4 минуты, 58 секунд (22.11.2011 - 14:21) Воитель написал(а):
Я перевёл с английского как исходник. Правильно?

Спустя 8 секунд (22.11.2011 - 14:21) Invis1ble написал(а):
Цитата
что такое сорц ?

исходный код. Там где лежит сам класс variant

Спустя 12 минут, 14 секунд (22.11.2011 - 14:34) Воитель написал(а):
Ну значит я интуитивно правильно понял. Дело в том что это 1С. У меня даже документации нет. Всё приходиться методом тыка.

Спустя 3 минуты, 13 секунд (22.11.2011 - 14:37) linker написал(а):
Воитель
Хреново, но это же у тебя PHP, ты работаешь с какой-то библиотекой, а значит что-то должно быть.

Спустя 1 минута, 52 секунды (22.11.2011 - 14:39) Invis1ble написал(а):
Воитель
я просто никогда не имел дело с 1С и слабо представляю себе что и как.
В php подключается скомпиленный модуль от 1С что-ли? Или как?

Спустя 22 минуты, 19 секунд (22.11.2011 - 15:01) Воитель написал(а):
Неее, это из COM соединения. Через COM я отправляю запрос в базу данных 1С.


$selection
это скорее аналог нашего $row из
$row=mysql_fetch_object($result);

Спустя 3 минуты, 24 секунды (22.11.2011 - 15:04) Воитель написал(а):
$vr = new COM('V82.ComConnector') or die("Unable to instanciate Excell");

$base1C = $vr->Connect('File="' . $BasePath . '";Usr="' . $Usr . '";Pwd="' . $Pwd . '"');


$query = $base1C->NewObject('Запрос');

$query->Текст =
'ВЫБРАТЬ
СправочникНоменклатура.Код,
СправочникНоменклатура.Артикул,
СправочникНоменклатура.Наименование,
СправочникНоменклатура.Родитель.Код КАК КодРод,
СправочникНоменклатура.ОсновноеИзображение,
СправочникНоменклатура.Ссылка
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ГДЕ
СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ'
;


$result = $query->Выполнить();
$selection = $result->Выбрать();
while ($selection->Следующий()) {

$roditel = $selection->Код; //Перевод кодировки делаю в 2 строки вроде потому что перевожу оъект в строку а потом в перекодирование
$roditel = iconv('cp1251', 'utf-8', $roditel);

$specifikaciya = $selection->Артикул;
$specifikaciya = iconv('cp1251', 'utf-8', $specifikaciya);

$sostovlyayuschie = $selection->Наименование;
$sostovlyayuschie = iconv('cp1251', 'utf-8', $sostovlyayuschie);

$gruppa = $selection->Ссылка->ПолноеНаименование();
$gruppa = $selection->КодРод;
$gruppa = $selection->ОсновноеИзображение->ИмяФайла;
$gruppa = $selection->ОсновноеИзображение->Хранилище->Получить();
$gruppa = $gruppa->ПолучитьДвоичныеДанные();
//$gruppa->Записать("D:\WebServers\home\4atrix\www\cron\file.jpeg");

echo $gruppa;
//$gruppa = $selection->ОсновноеИзображение;
//$gruppa .='';

//$reflection = new ReflectionClass(get_class($gruppa));
//echo '<pre>' . print_r(Reflection::export($reflection), true) . '</pre>';

//$gruppa->save('file.jpeg');

//var_dump($gruppa);


$file = fopen ("file.jpeg","w");
$str = "Hello, world!";
if ( !$file )
{
echo("Ошибка открытия файла");
}
else
{
fputs ( $file, $gruppa);
}
fclose ($file);

//$gruppa = iconv('cp1251', 'utf-8', $gruppa);

//echo $gruppa . " = " . $roditel." = ".$specifikaciya." = ".$sostovlyayuschie."<br />";


}

Спустя 2 минуты, 44 секунды (22.11.2011 - 15:07) Воитель написал(а):
Я тоже до недавнего времени не умел. Сейчас уже немного понимаю. У них всё похоже на AS2.


_____________
Вечно учусь.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.