PHP и COM
PHP может быть использован для доступа к COM и DCOM объектам на
Win32 платформах.
-
Я построил DLL для вычисления кое-чего. Можно ли запустить эту DLL из PHP?
-
Что значит 'Unsupported variant type: xxxx (0xxxxx)'?
-
Возможно ли манипулирование визуальными объектами в PHP?
-
Могу ли я сохранять COM объекты в сессии?
-
Как я могу поймать COM ошибки?
-
Можно ли генерировать DLL файлы из PHP скриптов как это можно делать в Perl?
-
Что значит
'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'?
-
Как можно запускать COM объекты с удалённого сервера?
-
Я получаю 'DCOM is disabled in C:\path...\scriptname.php on line 6',
что делать?
-
Возможно ли с помощью PHP загрузить/манипулировать ActiveX объектом на странице?
-
Возможно ли получить выполняющийся экземпляр компонента?
-
Есть ли способ обработать событие, посланное COM объектом?
-
У меня возникают проблемы при попытке вызвать метод COM объекта,
который предоставляет более чем один интерфейс. Что я могу сделать?
-
Значит PHP работает с COM, как насчёт COM+?
-
Если PHP может манипулировать COM объектами, можно ли представить себе
использование MTS для управления ресурсами компонентов
в соединении с PHP?
-
Я построил DLL для вычисления кое-чего. Можно ли запустить эту DLL из PHP?
-
Если это простая DLL, то пока ещё нет возможности вызвать её из PHP.
Если DLL содержит COM сервер, то вы могли бы получить доступ к ней, если
она реализует интерфейс IDispatch.
-
Что значит 'Unsupported variant type: xxxx (0xxxxx)'?
-
Существуют дюжины VARIANT типов и их комбинаций. Большинство из них уже
поддерживается, но несколько всё ещё не реализованы.
Массивы поддерживаются не полностью. Только одномерные индексированные
массивы могут передаваться между PHP и COM. Если вы обнаружите неподдерживаемые
типы, пожалуйста, сообщите о них как об ошибке (если это ещё не сделано)
и предоставте всю доступную информацию.
-
Возможно ли манипулирование визуальными объектами в PHP?
-
В общем да, но так как PHP в основном используется как скриптовый язык для
web и выполняется в контексте web сервера, то визуальные объекты никогда
не появятся на рабочем столе (desktop) сервера. Если вы используете PHP как
скрипт для приложений, например в связке с PHP-GTK, тогда нет ограничений
на доступ и манипулирование визуальными объектами через COM.
-
Могу ли я сохранять COM объекты в сессии?
-
Нет, не можете. Так как с экземплярами COM объектов обращаются
как с ресурсами, то они доступны только в контексте одного скрипта.
-
Как я могу поймать COM ошибки?
-
В PHP 5 COM расширение возбуждает исключение
com_exception, которое вы можете перехватить
и затем проверить поле code для того, чтобы
определить что делать дальше.
В PHP 4 поймать COM ошибки средствами, отличными от тех, что предлагает
сам PHP (@, track_errors, ...) невозможно.
-
Можно ли генерировать DLL файлы из PHP скриптов как это можно делать в Perl?
-
Нет, к сожалению такое средство недоступно для PHP.
-
Что значит
'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'?
-
Эта ошибка может возникнуть по разным причинам:
-
неправильный CLSID
-
отсутствует запрошенная DLL
-
запрошенный компонент не реализует интерфейс IDispatch
-
Как можно запускать COM объекты с удалённого сервера?
-
Точно так же как вы запускаете локальные объекты. Вам только надо передать
IP удалённой машины как второй параметер COM конструктора.
Убедитесь, что в вашем php.ini вы установили
Настройка во время выполнения=TRUE.
-
Я получаю 'DCOM is disabled in C:\path...\scriptname.php on line 6',
что делать?
-
Отредактируйте ваш php.ini и установите
Настройка во время выполнения=TRUE.
-
Возможно ли с помощью PHP загрузить/манипулировать ActiveX объектом на странице?
-
PHP здесь не причём. ActiveX объекты загружаются на стороне клиента,
если они были запрошены из HTML документа. Связи с PHP скриптом нет и,
следовательно, прямое взаимодействие с серверной стороной невозможно.
-
Возможно ли получить выполняющийся экземпляр компонента?
-
Это возможно с помощью моникеров. Если вы хотите получить несколько
ссылок на один и тот же экземпляр Word, вы можете создать этот экземпляр
как показано:
<?php $word = new COM("C:\docs\word.doc"); ?>
Это создаст новый экземпляр, если нет доступного выполняющегося экземпляра
или будет возвращена ссылка на выполняющийся экземпляр, если таковой доступен.
-
Есть ли способ обработать событие, посланное COM объектом?
-
Используя com_event_sink() вы можете определить
приёмник события и привязать его. Вы можете заставить PHP сгенерировать
скелет класса приёмника событий, используя
com_print_typeinfo().
-
У меня возникают проблемы при попытке вызвать метод COM объекта,
который предоставляет более чем один интерфейс. Что я могу сделать?
-
Ответ так же прост как и неудовлетворителен. Не знаю точно, но думаю,
что вы не можете ничего сделать. Если у кого-то есть точная
информация по этому вопросу, пожалуйста, дайте
» мне знать :)
-
Значит PHP работает с COM, как насчёт COM+?
-
COM+ расширяет COM, предоставляя систему для управления компонентами
через MTS и MSMQ, но здесь нет ничего особенного, что PHP должен
поддерживать для использования таких компонент.
-
Если PHP может манипулировать COM объектами, можно ли представить себе
использование MTS для управления ресурсами компонентов
в соединении с PHP?
-
Сам PHP ещё не обрабатывает транзакции. Таким образом, если возникает
ошибка, откат не инициируется. Если вы используете компоненты,
поддерживающие транзакции, вам будет необходимо реализовать
управление транзакциями самим.
|
|