Новые книги

Вниманию читателей предлагается справочник по PHP.

Справочник предназначается для людей, уже освоивших азы программирования на языке PHP.

Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.
Биткойн – это пиринговая платежная система и финансовая технология, ломающая многие привычные представления о деньгах и их роли в обществе. В этой книге представлена невероятная история о том, как идея подобной системы, изначально интересная лишь маленькой группке энтузиастов, постепенно привлекла к себе внимание всего мира.

В этой истории принимают участие самые неожиданные персонажи: финский студент и аргентинский миллионер, китайский предприниматель и программист-создатель Netscape, неудавшийся физик, ставший онлайн-наркобароном, и близнецы-плейбои, засудившие главу Facebook, акулы венчурного капитала и руководители крупнейших мировых банков, прокуроры, спецагенты и сенаторы США, ну и конечно, сам отец-основатель Биткойна, известный под псевдонимом Сатоши Накамото. И хотя многих ставит в тупик сама мысль о цифровой валюте, за которой не стоит мощное государство или центробанк, энтузиасты Биткойна во всем мире, от Пекина до Буэнос-Айреса, верят в потенциальную возможность этой финансовой системы стать всемирно признанными деньгами цифровой эпохи.

Книга адресована тем, кто интересуется современными финансовыми системами, и в частности, криптовалютными технологиями.

PHP и COM

Учебник РНР
Назад Вперёд

Глава 52. PHP и COM

PHP может использоваться для доступа к COM и DCOM-объектам на платформе Win32.

1. Я построил DLL для расчётов. Есть ли способ запустить эту DLL под PHP ?
2. Что означает 'Unsupported variant type: xxxx (0xxxxx)' ?
3. Можно ли манипулировать визуальными объектами в PHP ?
4. Могу ли я сохранить COM-объект в сессии ?
5. Как я могу отловить COM-ошибки ?
6. Могу ли я генерировать DLL-файлы в PHP-скриптах, как я это делаю в Perl ?
7. Что означает 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}' ?
8. Как я могу запустить COM-объект с удалённого сервера ?
9. Я получил 'DCOM is disabled in C:\path...\scriptname.php on line 6', что я могу сделать ?
10. Можно ли загрузить/манипулировать ActiveX-объектом на странице с помощью РНP ?
11. Можно ли получить работающий экземпляр компонента ?
12. Есть ли способ обработать событие, посланное от COM-объекта ?
13. У меня появились проблемы при попытке вызвать метод COM-объекта, имеющего не один интерфейс. Что можно предпринять ?
14. Итак, PHP работает COM, а как насчёт COM+ ?
15. Если PHP может манипулировать COM-объектами, можно ли представить использование MTS для обслуживания ресурсов компонентов в соединении с PHP ?

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, вы можете создать этот экземпляр так:

$word = new COM("C:\docs\word.doc");

Это создаст новый экземпляр, если нет доступного работающего экземпляра, или буде возвращён дескриптор/handle работающего экземпляра, если он имеется.

12. Есть ли способ обработать событие, посланное от COM-объекта ?

Пока нет.

13. У меня появились проблемы при попытке вызвать метод COM-объекта, имеющего не один интерфейс. Что можно предпринять ?

Ни шиша. Я точно не знаю, но думаю, что ничего. Если кто-нибудь имеет информацию об этом, пожалуйста, дайте мне знать.

14. Итак, PHP работает COM, а как насчёт COM+ ?

COM+ расширяет COM с помощью каркаса для обслуживания компонентов через MTS и MSMQ, но нет ничего специального для обслуживания таких компонентов в PHP.

15. Если PHP может манипулировать COM-объектами, можно ли представить использование MTS для обслуживания ресурсов компонентов в соединении с PHP ?

Сам PHP ещё не может обслуживать транзакции. Таким образом, если возникает ошибка, откат не инициируется. Если вы используете компоненты, которые поддерживают транзакции, вам нужно будет реализовать обслуживание транзакций самостоятельно.


Назад Оглавление Вперёд
PHP и HTML Вверх PHP и другие языки