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 ошибки?
-
COM расширение кидает исключение com_exception, которое вы можете перехватить и затем проверить у него поле code, чтобы понять, что делать дальше.
- Можно ли генерировать DLL файлы из PHP скриптов как это можно делать в Perl?
-
Нет, к сожалению такое средство недоступно для PHP.
- Что значит 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'?
-
Эта ошибка может возникнуть по разным причинам:
- неправильный CLSID
- отсутствует запрошенная DLL
- запрошенный компонент не реализует интерфейс IDispatch
- Как можно запускать COM объекты с удаленного сервера?
-
Точно так же как вы запускаете локальные объекты. Вам только надо передать IP удаленной машины как второй параметр COM конструктора.
Убедитесь, что в вашем php.ini вы установили com.allow_dcom=
TRUE
- Я получаю 'DCOM is disabled in C:\path...\scriptname.php on line 6', что делать?
-
Отредактируйте ваш php.ini и установите com.allow_dcom=
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 еще не обрабатывает транзакции. Таким образом, если возникает ошибка, откат не инициируется. Если вы используете компоненты, поддерживающие транзакции, вам будет необходимо реализовать управление транзакциями самим.
Вернуться к: ЧАВО