1
0
mirror of https://github.com/php/doc-uk.git synced 2026-03-23 22:52:14 +01:00
Files
archived-doc-uk/faq/com.xml
Gina Peter Banyard 4ee71889c9 Partial steps to fix build (#12)
---------

Co-authored-by: mproshchuk <mike.proshchuk@gmail.com>
2024-11-09 22:25:20 +02:00

291 lines
10 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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
-->