Jump to content

Recommended Posts

Posted

Boa tarde,

Gostaria de saber como é que consigo aceder a uma classe que esta noutro servidor através do php.

Ou seja, necessito de instanciar um objecto dessa classe e aceder aos respectivos métodos sendo que na realidade o objecto é instanciado num servidor, porém a classe que tem o construtor desse objecto esta noutro servidor.

Atenciosamente,

Ricardo Santos.

Posted

Olá,

uma classe não é mais do que um ficheiro por isso só tens que conseguir aceder a esse ficheiro e incluí-lo (include/require)

É a primeira vez que alguém apresenta ou cenário como o teu mas. Parece-me estranho que precises de fazer isso, mas ok.

Posted

Olá,

uma classe não é mais do que um ficheiro por isso só tens que conseguir aceder a esse ficheiro e incluí-lo (include/require)

É a primeira vez que alguém apresenta ou cenário como o teu mas. Parece-me estranho que precises de fazer isso, mas ok.

Boa tarde,

Desde já agradeço a resposta.

O que quero fazer é aceder a um ficheiro de conexão a base de dados com métodos que me retornem informações genéricas como o número de linhas afectadas por um Insert/Update/Delete, ou por exemplo que me devolva os resultados de um Select. A classe já a tenho criada e funcional se os ficheiros estiverem no mesmo servidor. O principal objectivo da classe é reutilizar a mesma para vários projectos de forma a não estar a rescrever código desnecessariamente. Se eventualmente um cliente solicitar a criação de uma aplicação que esteja alojada, após concluída, no seu servidor, o objectivo é ele instanciar um objecto dessa classe que está no meu servidor e utilizar os métodos respectivos.

Relativamente a resposta, com o include/require poderia ser uma solução porém teria de abilitar a função allow_url_include que por si só seria uma quebra na segurança das aplicação.

Alguém tem mais alguma ideia de como é que posso resolver este situação?

Posted
Em 07/07/2016 às 19:14, HappyHippyHippo disse:

queres usar uma classe que está implementada num projecto que existe num outro servidor ?

solução : copia o ficheiro

Boa tarde,

O que pretendo é instanciar um objecto de uma classe que esta num servidor diferente do qual eu estou a instanciar o objecto. Ou seja, no servidor A tenho o meu ficheiro data.php, por exemplo, e no servidor B tenho o ficheiro index.php.

Se o ficheiro data.php estive-se no mesmo servidor e diretoria do ficheiro index.php seria algo deste genero:

<?php
//Incluir o ficheiro data.php
include('data.php');
//Instanciação do Objecto da classe data
$data = new data();
?>

Ficheiro data.php:

<?php
class data
{
//Metodos
}
?>

Porém o meu ficheiro data.php esta noutro servidor e não no mesmo que o ficheiro index.php. Uma solução poderia ser fazer o include do ficheiro através da url do ficheiro, considerando que o ficheiro data.php esta na raiz do domínio exemplo.pt:

<?php
include('htttp://www.exemplo.pt/data.php');
?>

Para que esta solução resulte é necessário no php.ini ativar a configuração allow_url_include, o que por si só é uma falha de segurança.

A minha questão é se existe alguma maneira de instanciar um objecto de uma classe num servidor externo e fazer uso dos métodos que estão associados a esse objecto?

Desde já obrigado pela ajuda.

Posted (edited)

tens a tua questão, e eu tenho a minha :

qual o problema em copiar o ficheiro ?

Boa tarde,

Não a nenhum problema em copiar o ficheiro. O objectivo com este exemplo que demonstrei no ultimo post era realizar uma espécie de "biblioteca", como se fosse em .net. Ou seja, criava a classe, realizava o build da aplicação e tinha a dll. De seguida bastava fazer o import para os vários projectos que tenho.

Tentei ver como é que poderia fazer em php, porém não encontrei nenhum solução. Como tal pensei neste solução, em que tenho num servidor as "dll´s" e depois para os vários projectos que estariam hospedados fora do meu servidor, realizava um "include" dessas "dll´s" de forma a instanciar os objectos.

Edited by RicardoSantos97
Posted

antes de mais, quando fazes build da dll, não quer dizer que a dll está online para tu sacares e correr na tua aplicação.

esse exemplo volta a "cair" na situação : cópia o teu ficheiro

o que tu queres é algo que o Java implementa atra´ves daquilo a que se chama de RMI

em PHP estou a magicar aqui uma coisa, deixa testar antes de dizer algo ...

IRC : sim, é algo que ainda existe >> #p@p
Posted

antes de mais, quando fazes build da dll, não quer dizer que a dll está online para tu sacares e correr na tua aplicação.

esse exemplo volta a "cair" na situação : cópia o teu ficheiro

o que tu queres é algo que o Java implementa atra´ves daquilo a que se chama de RMI

em PHP estou a magicar aqui uma coisa, deixa testar antes de dizer algo ...

Também tinha visto o RMI, porém não encontrei aplicação pratica para PHP.

A questão de não copiar o ficheiro é de o cliente não ficar com o mesmo no servidor dele, ou seja de o codigo que desenvolvi fique de certa forma protegido.

Desde já obrigado pela ajuda.

Posted

ok ... arranjei uma solução para ti

isto é uma solução básica, o que indica que em termos de processos de segurança, és tu que terás de implementar em cima desta ideia

servidor:

<?php
echo <<<'EOD'
class MyClass {
 static public function add($v1, $v2) {
   return $v1 + $v2;
 }

 pubic function mult($v1, $v2) {
   return $v1 * $v2;
 }
}
EOD;

cliente:

eval( file_get_contents('http://...') );

echo "teste1 : " . MyClass::add(3, 3) . " (resultado esperado : 6)<br />";

$instance = new MyClass();
echo "teste2 : " . MyClass::mult(3, 3) . " (resultado esperado : 9)<br />";
IRC : sim, é algo que ainda existe >> #p@p
Posted
Em 7/7/2016 às 21:23, HappyHippyHippo disse:

ok ... arranjei uma solução para ti

isto é uma solução básica, o que indica que em termos de processos de segurança, és tu que terás de implementar em cima desta ideia

servidor:


<?php
echo <<<'EOD'
class MyClass {
 static public function add($v1, $v2) {
return $v1 + $v2;
 }

 pubic function mult($v1, $v2) {
return $v1 * $v2;
 }
}
EOD;
 

cliente:


eval( file_get_contents('http://...') );

echo "teste1 : " . MyClass::add(3, 3) . " (resultado esperado : 6)<br />";

$instance = new MyClass();
echo "teste2 : " . MyClass::mult(3, 3) . " (resultado esperado : 9)<br />";
 

Vou adaptar para aquilo que necessito.

Obrigado pela ajuda.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.