+1

Ampliando as possibilidades do PHP com componentes COM

criado por Daniel Melo em 29/09/2002 11:15pm
Em todos nossos exemplos, os componentes tem que estar instalados na maquina do servidor Web. Entretando, podemos acessar componentes em outra máquinas! Isto pode acontecer, devido ao DCOM (Distributed COM). O utilização é bem simples, ficando a cargo do sistema operacional gerenciar todas as comunicações em rede. Para a aplicação que acessa os componentes, é como se os componentes estivessem na própria máquina. Este artigo não vai mostrar o uso de DCOM, pois para a plicação é bem similar. Para maiores detalhes consulte o capítulo de COM da documentação PHP em http://www.php.net/manual/en/ref.com.php

Bom, como nem tudo é flores temos que falar dos "poréns". a implementação de COM no PHP ainda está em desenvolvimento e ainda tem muitas falhas, principalmente na conversão de tipos. A cada versão o suporte a COM é melhorado (veja os ChangeLogs), mas eu ainda considero experimental. Já da pra utilizar muitas funcionalidades, mas eu não confiaria 100% neste suporte. Não se assuste se algo que deveria funcionar, simplesmente não funcionar! ;) . Para saber um pouco mais sobre as limitações do suporte COM no PHP consulte : http://www.php.net/manual/en/faq.com.php

Espero que este artigo sirva para mostrar que a versão Windows do PHP pode fazer coisas "interessantes" e para fazer que as pessoas que dizem "ASP é lixo" re-pensarem seus conceitos : ASP tem suporte a COM 100% funcional.

Saudações Cordiais ...

Daniel Melo é desenvolvedor PHP, mas REALMENTE não gosta de fanáticos por tecnologias!

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.)