Ampliando as possibilidades do PHP com componentes COM
"Como construir componentes COM (ActiveX)?" . A maioria das ferramentas de desenvolvimento atuais podem construir componentes COM. Este artigo não vai descrever o processo de criação, mas apenas como um "startup", os primeiros passos para construir bibliotecas COM são :
- No Delphi e C++ Builder : File -> New -> ActiveX Library (Na aba ActiveX). Crie classes que herdem da classe "TComServ" e implementem a interface IUnknown.
- No Visual Basic : File -> New -> ActiveX DLL. Crie "Class Modules" que serão as classes de sua Type Library.
Classes Java podem ser componentes COM, utilizando o Visual J++. O Visual J++ gerará uma DLL que será apenas um "wrapper" para seu arquivo CLASS. Desnecessário dizer que o servidor web deve ter a máquina virtual java instalada.
Construir componentes COM para realizar as operações de nossa aplicação Web pode ser bastante interessante, em vários aspectos. Imaginem que podemos contruir um componente cpClientes, com a classe Dados, que faz todas as operações de acesso a banco de dados.
No script PHP apenas faríamos uma instância do nosso componente e chamariámos métodos, como por exemplo :
As vantagens desta abordagem são :
- Encapsulamento do código : O código fica encapsulado em um componente, tornando a manutenção mais fácil (não temos que procurar em dezenas de arquivos PHP), e proteje a propriedade intelectual do código!
- Reusabilidade : Outros softwares podem utilizar este componente!
- Flexibilidade : Podemos desenvolver este componente na linguagem em que estamos mais a vontade, podendo utilizar a estratégia de acesso a dodos que quisermos : Com ODBC, Sem ODBC, Com drivers nativos Java e etc.
A discussão sobre a utilização de componentes é bem extensa e merece um artigo só sobre isto.
- No Delphi e C++ Builder : File -> New -> ActiveX Library (Na aba ActiveX). Crie classes que herdem da classe "TComServ" e implementem a interface IUnknown.
- No Visual Basic : File -> New -> ActiveX DLL. Crie "Class Modules" que serão as classes de sua Type Library.
Classes Java podem ser componentes COM, utilizando o Visual J++. O Visual J++ gerará uma DLL que será apenas um "wrapper" para seu arquivo CLASS. Desnecessário dizer que o servidor web deve ter a máquina virtual java instalada.
Construir componentes COM para realizar as operações de nossa aplicação Web pode ser bastante interessante, em vários aspectos. Imaginem que podemos contruir um componente cpClientes, com a classe Dados, que faz todas as operações de acesso a banco de dados.
No script PHP apenas faríamos uma instância do nosso componente e chamariámos métodos, como por exemplo :
<?php $cpCliente = new COM("CPCLIENTES.Dados"); $cpCliente.Incluir($nome, $endereco); // Método para incluir clientes $cpCliente.Excluir($nome); // Métodos para excluir clientes // e etc ... ?>
As vantagens desta abordagem são :
- Encapsulamento do código : O código fica encapsulado em um componente, tornando a manutenção mais fácil (não temos que procurar em dezenas de arquivos PHP), e proteje a propriedade intelectual do código!
- Reusabilidade : Outros softwares podem utilizar este componente!
- Flexibilidade : Podemos desenvolver este componente na linguagem em que estamos mais a vontade, podendo utilizar a estratégia de acesso a dodos que quisermos : Com ODBC, Sem ODBC, Com drivers nativos Java e etc.
A discussão sobre a utilização de componentes é bem extensa e merece um artigo só sobre isto.
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)
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
(~20 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.
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
(~20 anos atrás)
Acho que o ASP é 100% compatível
ao suporte COM porque é nativo da plataforma
ao suporte COM porque é nativo da plataforma
17/10/2003 5:31am
(~21 anos atrás)
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!!!
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
(~21 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."
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
(~22 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
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
(~22 anos atrás)
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
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
(~22 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.
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
(~22 anos atrás)
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.
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
(~22 anos atrás)