VARIANT (COM) SAFE ARRAY in PHP

Panchous

Павел
VARIANT (COM) SAFE ARRAY in PHP

Здравствуйте!
Есть следующая задача:
СОМ-объект возвращает в скрипт данные бинарного файла,
который затем должен быть скачен юзером.
Я думаю поступить след.образом:
один из методов СОМ-объекта возвращает Variant-SAFE_ARRAY с массивом байт.
Далее я пробегаю этот массив и кидаю юзеру после хедера.
Правильное ли это решение?
Если ДА, то как правильно в таком случае работать с Variant?

т.е. я имею что-то типа:
PHP:
$out=null;
$out = $myCOM->getOut();
после этого $out будет уже объектом Variant (VT_ARRAY)?
каким образом я могу вывести эти данные пользователю?

PHP5.0.2

Спасибо!

-~{}~ 04.11.04 12:27:

Люди!
Отзовитесь!
 

Profic

just Profic (PHP5 BetaTeam)
А попробоать?
я не сильно представляю себе что такое массив байт.
В голову приходят 2 идеи
1) echo $out
2) foreach ($out as $byte) echo $byte;
но может еще как-это эти самые байты конвертить придеца - в общем пробуй...
 

Panchous

Павел
Проблема в том, что для начала надо решить,
как все это будет работать:
СОМ-объект пишет другой чел. и пока тестить нечего.
Вот я и думаю, какой метод у него попросить для получения бинарных данных и как с этим работать.
Лучше сперва подумать - потом реализовывать,
а то я на эти грабли уже наступал)
Не хотелось бы потом просить человека переписывать код...
 

Profic

just Profic (PHP5 BetaTeam)
Если данные не очень большие - то проце всего возвращать строку с бинарными данными. Да и даже если очень большие :) передать строку пусть и большую между php и com-объектом, думаю, будет быстрее чем обращаться за каждым байтом к массиву
 

Panchous

Павел
Profic
Я тоже об этом думал...
Размер данных не будет превышать 1Кб.
Но могут ли при этом возникнуть проблемы?
Т.е. это безопасный способ с точки зрения целостности данных?
 

Profic

just Profic (PHP5 BetaTeam)
Хм, а вот насчет того, что данные-то бинарные и могут содержать \0 я как-то не подумал. Я в деталях не знаю (это тебе лучше у того программера спросить), но если вместе со строкой передается и ее длина - то все должно быть хорошо.

-~{}~ 04.11.04 13:15:

Имеется ввиду на уровне общения COM/php, т.к. сам PHP внутри хранит и строку и ее длину
 

Panchous

Павел
данные-то бинарные и могут содержать \0
Да - это обычные бинарные данные (бинаный файл),
которые могут содержать все, что угодно.

А можно подробнее со строкой + длиной?
Как обработать такую строку?
 

Profic

just Profic (PHP5 BetaTeam)
Я не знаю, как строки передаются между com-объектом и php. Если как обычные C-строки (которые заканчиваются \0), то возникнут проблемы. Если же вместе со строкой com-объект передат и длину сроки, то на \0 в середине строки наплевать, т.к. известна полная ее длина.
Т.к. я не знаю протокола обмена, то и посоветовал спросить у программера, который делает этот com-объект. Он, по идее, должен знать.
Php внутренне хранит строку и ее длину. Потому проблемы, если возникнут, то только на стадии передачи строки из com-объекта в php, который уже никаких проблем не вызовет.
 
Сверху