PHP может использоваться для доступа к COM и DCOM-объектам на платформе Win32.
1. Я построил DLL для расчётов. Есть ли способ запустить эту DLL под PHP ?
Если это простая DLL, то пока нет способа запустить её из PHP. Если DLL-библиотека содержит COM-сервер, вы можете получить к ней доступ, если она реализует интерфейс IDispatch.
2. Что означает 'Unsupported variant type: xxxx (0xxxxx)' ?
Имеются десятки типов VARIANT и их комбинаций. Большинство из них уже поддерживается, но некоторые ещё ждут своей реализации. Массивы поддерживаются неполностью. Только одномерные массивы можно передавать между PHP и COM. Если вы обнаружили другие типы, которые не поддерживаются, сообщите, пожалуйста, о них как о bug (если это ещё не сделано) и предоставьте как можно более подробную информацию.
3. Можно ли манипулировать визуальными объектами в PHP ?
Вообще-то да, но, поскольку PHP в основном используется как язык web-скриптинга, он работает в контексте web-серверов; таким образом, визуальные объекты никогда не появляются на рабочем столе серверов. Если вы используете PHP для скриптинга приложений, например, в соединении с PHP-GTK, нет никаких ограничений при доступе и манипуляциях с визуальными объектами через COM.
4. Могу ли я сохранить COM-объект в сессии ?
Нет, не можете. COM-экземпляры рассматриваются как ресурсы, и поэтому они могут быть доступны только в контексте отдельного скрипта.
5. Как я могу отловить COM-ошибки ?
В настоящее время невозможно отлавливать COM-ошибки другими способами, помимо тех, которые предоставлены в самом PHP (@, track_errors, ..), но мы думаем над реализацией этого.
6. Могу ли я генерировать DLL-файлы в PHP-скриптах, как я это делаю в Perl ?
Нет, к сожалению, такой утилиты для PHP нет.
7. Что означает 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' ?
Эта ошибка может появиться по разным причинам:
неправильный CLSID
запрошенная DLL отсутствует
запрошенный компонент не реализует интерфейс IDispatch
8. Как я могу запустить COM-объект с удалённого сервера ?
Точно так же, как вы запускаете локальные объекты. Вы только должны передать IP удалённой машины как второй параметр COM-конструктору.
Убедитесь, что вы установили com.allow_dcom=true в вашем php.ini.
9. Я получил 'DCOM is disabled in C:\path...\scriptname.php on line 6', что я могу сделать ?
Отредактируйте ваш php.ini и установите com.allow_dcom=true.
10. Можно ли загрузить/манипулировать ActiveX-объектом на странице с помощью РНP ?
В PHP ничего сделать нельзя. ActiveX-объекты загружаются на стороне клиента, если запрашиваются HTML-документом. Никакой связи с PHP-скриптом нет, и, следовательно, нет возможности прямого взаимодействия на сервере.
11. Можно ли получить работающий экземпляр компонента ?
Это можно сделать с помощью клички/moniker. Если вы хотите получить несколько ссылок на один экземпляр word, вы можете создать этот экземпляр так: