mirror of
https://github.com/php/doc-uk.git
synced 2026-03-23 22:52:14 +01:00
291 lines
10 KiB
XML
291 lines
10 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: e0352653179c355a6b9c353629147b06a2069f24 Maintainer: mproshchuk Status: ready -->
|
||
<chapter xml:id="faq.com" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<title>PHP і COM</title>
|
||
<titleabbrev>PHP і COM</titleabbrev>
|
||
|
||
<para>
|
||
PHP можна використати для доступу до об'єктів COM і DCOM на платформах Win32.
|
||
</para>
|
||
|
||
<qandaset>
|
||
<qandaentry xml:id="faq.com.q1">
|
||
<question>
|
||
<para>
|
||
Я зібрав DLL для обчислень. Яким чином запустити цю DLL в PHP?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Якщо це звичайна DLL, то її поки що не запустити з PHP. Якщо DLL містить
|
||
COM сервер, ви можете мати доступ до нього, якщо він реалізував
|
||
інтерфейс IDispatch.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q2">
|
||
<question>
|
||
<para>
|
||
Що означає "Unsupported variant type: xxxx (0xxxxx)"?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Є десятки типів VARIANT та їхніх комбінацій. Більшість з них вже
|
||
підтримуються, але кілька ще на стадії впровадження. Масиви підтримуються
|
||
не повністю. Тільки одновимірні індексовані масиви можуть передаватися між
|
||
PHP та COM. Якщо ви знайшли інші типи, що не підтримуються, повідомте,
|
||
будь ласка, про них, як про ваду (якщо вже не повідомлено) та надайте
|
||
якнайбільше інформації.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q3">
|
||
<question>
|
||
<para>
|
||
Чи можливо керувати візуальними об'єктами в PHP?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Загалом так, але оскільки PHP є мовою веб-сценаріїв, її код
|
||
запускається в контексті вебсервера, тому візуальні об'єкти ніколи не
|
||
з'являться на робочому столі серверів. Якщо ви, наприклад, використовуєте
|
||
PHP для написання програм спільно з PHP-GTK, то нема обмежень доступу або
|
||
керування візуальними об'єктами через COM.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q4">
|
||
<question>
|
||
<para>
|
||
Чи я можу зберігати об'єкт COM в сесії?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Ні, не можете. Екземпляри COM розглядаються як ресурси, тому вони доступні
|
||
лише в контексті одного сеансу.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q5">
|
||
<question>
|
||
<para>
|
||
Як я можу перехопити помилки COM?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Розширення COM викидає виключення <literal>com_exception</literal>, які
|
||
ви можете ловити, щоб визначити і оглянути проблемну частину
|
||
<literal>коду</literal>.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q6">
|
||
<question>
|
||
<para>
|
||
Чи я можу генерувати файли DLL скриптами PHP, так як це робив на Perl?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Ні, на жаль на PHP такий інструмент недоступний.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q7">
|
||
<question>
|
||
<para>
|
||
Що означає "Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Ця помилка може бути з декількох причин:
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
неправильний CLSID
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
необхідна DLL відсутня
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
запитуваний компонент не реалізує інтерфейс IDispatch
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q8">
|
||
<question>
|
||
<para>
|
||
Як мені запускати об'єкти COM з віддаленого сервера?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Так само, як і локальні об'єкти. Вам лише треба передати другим параметром
|
||
конструктору COM IP віддаленої машини.
|
||
</para>
|
||
<para>
|
||
Переконайтеся, що ви визначили
|
||
<link linkend="ini.com.allow-dcom">com.allow_dcom</link><literal>=</literal>&true;
|
||
у вашому &php.ini;.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q9">
|
||
<question>
|
||
<para>
|
||
Я отримую "DCOM is disabled in C:\path...\scriptname.php on line 6", що я
|
||
можу зробити?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Відредагуйте ваш &php.ini;, задавши
|
||
<link linkend="ini.com.allow-dcom">com.allow_dcom</link><literal>=</literal>&true;.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q10">
|
||
<question>
|
||
<para>
|
||
Чи можливо завантажувати/маніпулювати об'єктом ActiveX на сторінці за
|
||
допомогою PHP?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Це не має нічого спільного з PHP. Об'єкти ActiveX завантажуються у
|
||
клієнтський код за запитом документа HTML. Це не стосується скрипту PHP,
|
||
тому пряма взаємодія на стороні сервера неможлива.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
<qandaentry xml:id="faq.com.q11">
|
||
<question>
|
||
<para>
|
||
Чи можливо отримати запущений екземпляр компонента?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Це можливо завдяки псевдонімам. Якщо треба отримати численні посилання на
|
||
той самий екземпляр слова, ви можете створити цей екземпляр, як показано:
|
||
</para>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$word = new COM("C:\docs\word.doc");
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
<para>
|
||
Це створить новий екземпляр, якщо запущеного немає, або поверне дескриптор
|
||
запущеного екземпляра, якщо він доступний.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
<qandaentry xml:id="faq.com.q12">
|
||
<question>
|
||
<para>
|
||
Чи є спосіб обробки події, надісланої з об’єкта COM?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Ви можете створити обробник подій і прив'язати його, використавши
|
||
<function>com_event_sink</function>. Щоб PHP генерував скелет для класу
|
||
приймача подій, є функція <function>com_print_typeinfo</function>.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q13">
|
||
<question>
|
||
<para>
|
||
Не можу викликати метод об'єкта COM, який реалізує більше ніж один
|
||
інтерфейс. Що я можу зробити?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
Відповідь настільки проста, наскільки і незадовільна. Невідомо, чому так,
|
||
але не можна нічого з цим вдіяти.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q14">
|
||
<question>
|
||
<para>
|
||
Отже, PHP працює з COM, як щодо COM+?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
COM+ розширює COM платформою для керування компонентами через MTS і MSMQ,
|
||
але в цьому немає нічого особливого, аби PHP мав підтримку цього продукту.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
<qandaentry xml:id="faq.com.q15">
|
||
<question>
|
||
<para>
|
||
Якщо PHP може керувати об'єктами COM, чи можемо ми уявити використання MTS
|
||
для керування ресурсами компонентів у поєднанні з PHP?
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
PHP сам ще не обробляє транзакції. Таким чином, якщо виникає помилка,
|
||
відкочування не починається. Якщо ви використовуєте компоненти, які
|
||
підтримують транзакції, вам треба власноруч реалізувати управління
|
||
транзакціями.
|
||
</para>
|
||
</answer>
|
||
</qandaentry>
|
||
|
||
</qandaset>
|
||
</chapter>
|
||
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|