mirror of
https://github.com/php/doc-pt_br.git
synced 2026-03-23 22:52:12 +01:00
286 lines
8.4 KiB
XML
286 lines
8.4 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!-- EN-Revision: e0352653179c355a6b9c353629147b06a2069f24 Maintainer: ae Status: ready --><!-- CREDITS: narigone,marcelsud,ae,leonardolara -->
|
|
<chapter xml:id="faq.com" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>PHP e COM</title>
|
|
<titleabbrev>PHP e COM</titleabbrev>
|
|
|
|
<para>
|
|
PHP pode ser usado para acessar objetos COM e DCOM em plataformas Win32.
|
|
</para>
|
|
|
|
<qandaset>
|
|
<qandaentry xml:id="faq.com.q1">
|
|
<question>
|
|
<para>
|
|
Eu construí uma DLL para calcular algo. Existe uma maneira de executar essa DLL no PHP?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Se for uma DLL simples, ainda não tem como executá-la no PHP. Se a DLL contiver um serviço
|
|
COM, você pode acessá-lo se ele implementar a interface IDispatch.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q2">
|
|
<question>
|
|
<para>
|
|
O que 'Unsupported variant type: xxxx (0xxxxx)' significa?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Existem dezenas de tipos VARIANT e combinações dos mesmos. A maioria deles já é suportada mas
|
|
alguns ainda têm que ser implementados.
|
|
Arrays não são completamente suportados. Apenas arrays indexados com
|
|
uma única dimensão podem ser passados entre o PHP e COM.
|
|
Se você achar outros tipos que não são suportados, por favor relate-os como um problema (se não tiverem sido relatados ainda)
|
|
e passe o máximo de informação disponível.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q3">
|
|
<question>
|
|
<para>
|
|
É possível manipular objetos visuais no PHP?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Geralmente é, mas como o PHP é principalmente usado como linguagem de script para web, ele é executado no contexto dos servidores web, então
|
|
objetos visuais nunca aparecerão no desktop do servidor.
|
|
Se você usa o PHP para script de aplicações (por exemplo, em conjunto com PHP-GTK) não há limitação no acesso e
|
|
manipulação de objetos visuais através de COM.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q4">
|
|
<question>
|
|
<para>
|
|
Posso guardar um objeto COM em uma sessão?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Não, não pode. Instâncias COM são tratadas como recursos (tipo "resource") e, portanto, só estão disponíveis no contexto de um script único.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q5">
|
|
<question>
|
|
<para>
|
|
Como eu capturo erros de COM?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
A extensão COM lança exceções do tipo
|
|
<literal>com_exception</literal>, que você pode capturar e então inspecionar o
|
|
membro <literal>code</literal> para determinar o que fazer em seguida.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q6">
|
|
<question>
|
|
<para>
|
|
Posso gerar arquivos DLL a partir de scripts PHP como eu posso no Perl?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Não, infelizmente não existe tal ferramenta disponível para o PHP.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q7">
|
|
<question>
|
|
<para>
|
|
O que significa 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Esse erro pode ter várias razões:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
o CLSID está errado
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
a DLL requisitada não existe ou não pode ser lida
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
o componente requisitado não implementa a interface IDispatch
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q8">
|
|
<question>
|
|
<para>
|
|
Como posso executar um objeto COM a partir de um servidor remoto?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Exatamente como você executa objetos locais. Você só tem que passar o IP da máquina remota como segundo parâmetro para
|
|
o construtor COM.
|
|
</para>
|
|
<para>
|
|
Tenha certeza de marcar
|
|
<link linkend="ini.com.allow-dcom">com.allow_dcom</link><literal>=</literal>&true;
|
|
no seu &php.ini;.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q9">
|
|
<question>
|
|
<para>
|
|
Eu vejo o erro 'DCOM is disabled in C:\path...\scriptname.php on line 6', o que posso fazer?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Edite seu arquivo &php.ini; e marque
|
|
<link linkend="ini.com.allow-dcom">com.allow_dcom</link><literal>=</literal>&true;.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q10">
|
|
<question>
|
|
<para>
|
|
É possível carregar/manipular um objeto ActiveX em uma página com PHP?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Isso não tem nada a ver com o PHP. Objetos ActiveX são carregados no lado do cliente se eles forem requisitados
|
|
pelo documento HTML. Não há relação com o script PHP e, portanto, nenhuma possível interação
|
|
direta com o lado do servidor.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
<qandaentry xml:id="faq.com.q11">
|
|
<question>
|
|
<para>
|
|
É possível obter uma instância em execução de um componente?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
É possível com a ajuda de monikers. Se você quiser obter referências múltiplas para a mesma instância
|
|
do Word, você pode criar essa instância como mostrado abaixo:
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$word = new COM("C:\docs\word.doc");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
Isso criará uma nova instância se não houver nenhuma instância em execução disponível e retornará um identificador para a
|
|
instância em execução, se disponível.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
<qandaentry xml:id="faq.com.q12">
|
|
<question>
|
|
<para>
|
|
Existe alguma maneira de lidar com um evento enviado por um objeto COM?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Você pode definir um interceptador de eventos e vinculá-lo usando
|
|
<function>com_event_sink</function>. Você pode usar
|
|
<function>com_print_typeinfo</function> para que o PHP gere um esqueleto
|
|
para a classe interceptadora de eventos.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q13">
|
|
<question>
|
|
<para>
|
|
Estou tendo problemas ao tentar invocar um método de um objeto COM
|
|
que expõe mais de uma interface. O que posso fazer?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
A resposta é tão simples quanto insatisfatória. Não sabemos exatamente, mas achamos que não há nada que você possa fazer.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q14">
|
|
<question>
|
|
<para>
|
|
Então PHP funciona com COM. E com COM+?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
COM+ estende COM por meio de um framework para manipular componentes através de MTS e MSMQ, mas não há nada de especial
|
|
que o PHP precise suportar para usar tais componentes.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.com.q15">
|
|
<question>
|
|
<para>
|
|
Se o PHP pode manipular objetos COM, podemos imaginar o uso de
|
|
MTS para manipular recursos de componentes, em conjunto com o PHP?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
O PHP em si não lida com transações ainda. Por isso, se um erro
|
|
ocorrer, nenhuma reversão é iniciada. Se você usar componentes que
|
|
suportam transações, você terá que implementar a
|
|
manipulação de transações por conta própria.
|
|
</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
|
|
-->
|