На платформах Win32 языком PHP пользуются для доступа к COM- и DCOM-объектам.
PHP пока не умеет запускать просто DLL-библиотеки, но если DLL-файл содержит COM-сервер и библиотека реализует интерфейс IDispatch, для PHP откроется доступ к такому серверу.
В конкретных языках программирования определяют десятки типов данных VARIANT и их комбинаций. Бо́льшую часть вариантов PHP уже поддерживает, но отдельные варианты в языке по-прежнему не реализовали. Массивы поддерживаются не на 100 %. Между PHP и COM разрешается передавать только одномерные индексные массивы. Пожалуйста, сообщите о других типах как об ошибке, если не сделали это раньше, если обнаружите типы, которые PHP не поддерживает, и дайте как можно больше информации.
Да, PHP умеет манипулировать визуальными объектами, но поскольку PHP чаще работает как язык веб-скриптов и запускается в контексте веб-сервера, визуальные объекты не появятся на рабочем столе сервера. Доступ и манипулирование визуальными объектами через COM не ограничиваются, когда на PHP пишут приложения, например, в связке с модулем PHP-GTK.
Нет, нельзя, поскольку экземпляры COM рассматриваются как ресурсы, они доступны только в контексте одного скрипта.
Модуль COM выбрасывает исключение com_exception
,
которое перехватывают, а затем проверяют в исключении свойство code
,
чтобы понять, что делать дальше.
Нет, для PHP такого инструмента нет.
Эта ошибка возникает по разным причинам:
Точно так же, как запускают локальные объекты. Потребуется только передать IP-адрес удалённой машины как второй параметр конструктора COM.
Убедитесь, что включили директиву
com.allow_dcom=
true
в файле php.ini
Отредактируйте файл php.ini и включите директиву
com.allow_dcom=
true
.
Это не имеет отношения к PHP. Объекты ActiveX загружаются на стороне клиента, если их запросил HTML-документ. Связи с PHP-скриптом здесь нет, поэтому прямое взаимодействие со стороны сервера невозможно.
Экземпляр получают через моникеры (англ. monikers). Экземпляр создают вот так, когда требуется получить больше одной ссылки на один и тот же экземпляр Word:
<?php
$word = new COM("C:\docs\word.doc");
?>
Код создаст новый экземпляр, если нет доступного запущенного экземпляра, или вернёт дескриптор запущенного экземпляра, если экземпляр доступен.
Приёмник события определяют и привязывают функцией com_event_sink(). Скелет класса приёмника событий функция в PHP генерирует функция com_print_typeinfo().
Ответ настолько же простой, насколько и неудовлетворительный. Точно не известно, но, скорее всего, ничего сделать невозможно.
Технология COM+ расширяет модель COM за счёт платформы управления компонентами через службу MTS и MSMQ-очередь, но PHP не поддерживает ничего отдельно, чтобы работать с такими компонентами.
Сам PHP пока не обрабатывает транзакции. Поэтому, если возникает ошибка, откат не инициируется. При работе с компонентами, которые поддерживают транзакции придётся реализовать управление транзакциями самому.