+1

Ampliando as possibilidades do PHP com componentes COM

criado por Daniel Melo em 29/09/2002 11:15pm
Os sistemas operacionais 32-bit Windows são construídos baseados na tecnologia de componentização COM (Component Object Model). Atualmente, por motivos de "marketing", os componentes COM são chamados também de componentes ActiveX. É usual referenciar esta tecnologia como "Automação OLE". São muitos nomes para uma mesma tecnologia : Modelo de componentes COM. Coisas da Microsoft.

"Mas o que são realmente componentes COM ou ActiveX ?" . Componentes COM são divisões de software, que oferecem serviços para qualquer outra aplicação. Estes componentes podem ser escritos em qualquer linguagem que suporte a tecnologia COM (Delphi, C++, Java, Perl, Visual Basic e outras), e podem ser acessados por qualquer outro software escritos em uma linguagem que suporte COM. O sistema operacional Windows, que provêm esta tecnologia, é responsável por fazer as ligações, conversões de tipos e tudo o que for necessário para componentes COM, escritos em diferentes ferramentas se comunicar.

Falando em "bits e bytes", componentes COM (ou ActiveX) podem ser bibliotecas DLL ou arquivos EXE. A diferença destes arquivos EXE ou DLL , para os executáveis e bibliotecas convencionais, é que os componentes COM são construídos com uma interface comum, o que garante compatibilidade binária, necessária para a comunicação entre os diversos componentes.

Nota : Se o componente for escrito em Java, será gerado um pequeno arquivo DLL que "aponta" para um arquivo CLASS

"Onde o PHP entra nesta estória ?" . O objetivo deste artigo não é descrever o funcionamento da tecnologia COM, que é um assunto bastante extenso. Este artigo quer mostrar que o PHP pode funcionar como um cliente COM, ou seja, pode utilizar serviços de outros componentes COM. Obviamente, apenas a versão Windows do PHP pode utilizar serviços de componentes COM, pois esta tecnologia é implementada em sistemas operacionais Windows 32-bit (Win 95/98/Me , Win NT, Win 2000, Win XP). Para mais informações sobre o modelo COM consulte http://www.microsoft.com/Com/resources/comdocs.asp

Os sistemas operacionais do mundo Unix, geralmente, dão suporte a tecnologia de componentização CORBA, mas o PHP não suporta chamadas a componentes CORBA.

Comentários:

Mostrando 1 - 10 de 18 comentários
Tenho uma aplicação em PHP rodando em servidor linux, entretanto preciso em determinado momento, fazer um upload de um MDB, direto da maquina do usuario que esta em ambiente windows e inseri-lo no mysql que esta em servidor linux. É possivel fazer isso?
13/03/2006 4:09am (~18 anos atrás)

José Walter disse:
Tenho lido diversos artigos de exportação de dados do MySql+PHP para aplicativos Microsoft... alguém pode me informar como fazer esta exportação para planilhas e textos do OpenOffice?
05/02/2005 11:45pm (~19 anos atrás)

O PHP4 suporta CORBA, basta baixar a extensão Universe em http://universe-phpext.sourceforge.net. Esta extensão funciona muito bem.
O PHP5 ainda não suporta CORBA, mas estou criando uma extensão CORBA para PHP5. Você pode verificar em http://phporb.sourceforge.net.
17/01/2005 6:50am (~19 anos atrás)

Valmirez disse:
Acho que o ASP é 100% compatível
ao suporte COM porque é nativo da plataforma
17/10/2003 5:31am (~20 anos atrás)

darksaj disse:
assim... eu to migrando um site d asp para php.
para fazer a conecção com o banco de dados eu preciso usar o php d um servidor linux, mas o banco de dados é access.
eu usava a classe COM, mas n estava dando certo pq essa classe soh funciona em servidores windows!
será q alguem sabe com incluir essa classe no linux, ou c ha alguma outra classe para que eu possa usar???

obrigado!!!
24/07/2003 1:16pm (~20 anos atrás)

Bem,
finalmente consegui!!! Caminhei pelas dicas do Daniel sobre a Classe VARIANT, e após cansativos teste... consegui capturar um valor passado por referencia.
Exemplo: (copie e cole ...)

<?
$Comp = new COM("MeuComponente");

/* Metodo SOMAR

Parametros INPUT: value1, value2: Integer
PArametros OUTPUT: soma: OLEVARIANT; */

/* Sua implementação (em Delphi) segue abaixo:
Soma := 'O valor da soma é : IntToStr((Value1 + Value2)); */

/* Podemos passar os parametros de input tanto desta forma: */
$Value1 = new Variant(8, VT_INT);
$Value2 = new Variant(1000, VT_INT);
/* Como desta: */
$Value1 = 8;
$Value2 = 1000;
/* Que Funciona corretamente; */

/* Passa-se o Parametro de OUTPUT assim: */
$soma = new Variant;

/* Simplesmente isso... vc pode colocar um tipo para este VARIANT como VT_INT,
VT_BSTR, VT_VARIANT e funciona também. Por isso, realizei o teste sem passar
nenhum tipo e funcionou tb! ;) */

/* Feito isso, é só executar o método */

$Comp->Somar($Value1, $Value2, $soma);

/* E escrever na tela o valor de $soma...*/

echo $soma->value;

/* O Resultado mostrado na tela é :

O valor da soma é : 1008 */
?>

Prontinho... A grande sacada é o configurar o parametro de OUTPUT no seu componente como:
"OLEVARIANT".

Espero que seja util pra vcs...

Obrigado!!! Valeu a "luz" do Daniel e muito!!!! ehehehehe

Falow!!!

João Paulo Souza (JPSouza) - "A perfeição pode ser utópica, porém, deve ser uma tendência."
09/01/2003 3:35pm (~21 anos atrás)

Daniel,
valeu a dica... Mas até agora só o que recebo é "Warning: Invoke() failed: Tipo não correspondente". E olha que já fiz diversos testes alterando o tipo do VARIANT tanto no PHP como no componente COM. E sempre é isso... :(
Vou tentar mais... se conhecer alguem que já tenha passado por isso e conseguiu solução... me avise por favor...
E para outros que queiram me ajudar... agradeco desde já... Esta parece ser uma questao complicada... nao???

Falow
09/01/2003 1:21pm (~21 anos atrás)

Daniel Melo disse:
Eu já li que existe uma forma, mas eu confesso que pessoalmente nunca testei.

Se funcionar poste uma mensagem...

Se voce quiser passar um parametro por referencia para um componente COM, e necessario que a variavel seja do tipo Variant.

Como nao existe este tipo no PHP, existe uma classe Variant, para representar este tipo de dado.

O exemplo seria o seguinte:

$soma = new VARIANT(0, VI_4|VT_BYREF);
...
$comp->Somar(1,2,$soma);

O resultado estaria em : $soma->value;

VI_4 é uma constante que diz que a variável espera um inteiro de 4 bytes. Voce tem que ver na interface de seu componente, qual o tipo de dado que ele vai retornar e usar a constante adequada, senao pode dar type mismatch.

A lista das constantes voce encontra no manual PHP :

http://www.php.net/manual/en/class.variant.php

Saudacoes,

Daniel
03/01/2003 8:08pm (~21 anos atrás)

Valeu, então meus planos acho que foram por água abaixo...hehe...

Mas olha só, agora não tem muito a ver com o PHP, o excel consegue se conectar em um servidor com MySQL usando VB? Acho que sim né...

Não tem jeito mesmo, vou ter que aprender um pouco de VB.
28/11/2002 8:53pm (~21 anos atrás)

Daniel Melo disse:
A maquina que é o servidor WEB tem que SER obrigatoriamente Windows e ter o Excel instalado.

A maquina quem tem o arquivo Excel pode ser ate Linux. Basta o servidor Windows acessar uma pasta compartilhada no servidor Linux.
26/11/2002 3:40pm (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)