PHP - Como executar uma aplicação do Sist. Op. a partir do browser?

Iniciado por jtmdias, 06 de Junho de 2011, 19:08

tópico anterior - próximo tópico

jtmdias

Ora viva!
Estou a desenvolver uma pequena página de configuração fácil de tarefas regulares em ambiente de desenvolvimento Web, como, por exemplo, abrir o Filezilla, ou editar ficheiros comuns do LAMPP (httpd.conf,php.ini,etc). Isto será a página local pré-definida na distro Linux que estou a criar num projecto.

Ora, estou aqui com um problema.
Desejo que os utilizadores possam abrir o Filezilla clicando num link na página.
Pensei que abrir o Filezilla através do browser seria possível, apenas utilizando...

<?phpecho exec('filezilla');?>?>


ou então

<?php$comando = shell_exec('filezilla');echo "<pre>$comando</pre>";?>?>


Acontece que nenhuma delas abre o filezilla, mas se abrir a consola e escrever
/usr/bin/filezilla
ou apenas
filezilla
o programa já abre, naturalmente.

Já pensei se não será alguma definição do Apache que tenho que mudar, ou se tenho que criar um script de consola simples para abrir o programa e chamar o script no php, mas a verdade é que a informação é tanta e diversificada, que fico perdido.

Alguém me pode ajudar, por favor?

P.S:
Se fizer php /var/www/executar/index.php
o filezilla também se inicia.
sudo apt-get moo

fpissarra

Imagine o seguinte cenário: Se isso fosse possível, o que empediria de um site executar, por exemplo, um:
rm -rf /
?

O comando exec() só permite execução na lado do servidor, não no lado do cliente.

jtmdias

Certo, percebi. Então, mesmo sendo apenas para desenvolvimento, posso tirar a ideia de abrir apps pelo Browser?
Era só mesmo para que os alunos (é um projecto para uma faculdade) tivessem as ferramentas todas à mão.
sudo apt-get moo

irtigor

O apache não é um processo do seu usuário (roda com um usuário próprio, somente com o necessário), ele não sabe qual xserver usar e, mesmo que soubesse, não tem permissão. Pra fazer funcionar, o processo vai ser similar ao usado pra rodar aplicativos gráficos via cronjobs.

fpissarra

Citação de: jtmdias online 06 de Junho de 2011, 20:09
Certo, percebi. Então, mesmo sendo apenas para desenvolvimento, posso tirar a ideia de abrir apps pelo Browser?
Era só mesmo para que os alunos (é um projecto para uma faculdade) tivessem as ferramentas todas à mão.

Pelo browser não é possível. E é importante que seus estudantes entendam que isso é por motivo de segurança.
UMA das muitas falhas de segurança de browsers como o Internet Explorer, no ambiente cheio de vidraças, é que é possível desenvolver uma aplicação (uma "applet", por assim dizer) que executa código binário no lado do cliente. Esses "applets" são feitos em linguagens compiladas e chamam-se Active-X.

Existem alguns "remendos" no IE para tentar possibilitar alguma segurança, é claro, mas se você puder executar código binário pelo browser, em essência, o seu usuário vira um pato numa caçada: pode levar um tiro em qualquer momento.

jtmdias

Certo, compreendi. É uma medida de segurança, portanto.
Obrigado pela ajuda :)
sudo apt-get moo

irtigor

Citação de: fpissarra online 07 de Junho de 2011, 16:17
Pelo browser não é possível.
Errado, é plenamente possível (como disse na minha outra mensagem).

fpissarra

Citação de: irtigor online 07 de Junho de 2011, 18:49
Citação de: fpissarra online 07 de Junho de 2011, 16:17
Pelo browser não é possível.
Errado, é plenamente possível (como disse na minha outra mensagem).

Só não mostrou como!

No mundo Microsoft você pode fazer algo assim:

<script>
function LaunchApp() {
 if (!document.all) {
   alert ("Available only with Internet Explorer.");
   return;
 }
 
 var ws = new ActiveXObject("WScript.Shell");
 ws.Exec("C:\\Path\\To\\File\\program.exe");
}
</script>


Só que vai esbarrar com:

1. Esse treco só funciona no IE;
2. O IE reclama e, provavelmente, não te deixará fazer isso;
3. Só funciona no Windows (ActiveX).

Gostaria de ver um código que funcione no browser, em ambiente Linux....

irtigor

Citação de: fpissarra online 07 de Junho de 2011, 20:03
Só não mostrou como!

Não forneci exemplo prático (não é a mesma coisa), até porque, como disse, é similar ao processo usado pra abrir aplicativos gráficos via cronjobs mas, já que pediu


<?php$res = shell_exec("DISPLAY=____ /caminho/completo/ate/o/aplicativo 2>&1 &");#controleecho $res?>



Se for testar na mesma máquina, o valor do DISPLAY (no lugar do ____) deve ser :0, echo $DISPLAY (em um emulador de terminal) pra confirmar. Se for remoto, tem que especificar junto o nome e domínio. O xserver também deve permitir a conexão, o correto seria via xauth, mas já que é só um teste, em um terminal digite xhost + (pra permitir qualquer um) e depois que rodar o script, xhost - (restaurar).

-------link
http://www.tldp.org/HOWTO/Remote-X-Apps-5.html

fpissarra

Citação de: irtigor online 07 de Junho de 2011, 21:04
Citação de: fpissarra online 07 de Junho de 2011, 20:03
Só não mostrou como!

Não forneci exemplo prático (não é a mesma coisa), até porque, como disse, é similar ao processo usado pra abrir aplicativos gráficos via cronjobs mas, já que pediu


<?php$res = shell_exec("DISPLAY=____ /caminho/completo/ate/o/aplicativo 2>&1 &");#controleecho $res?>



Se for testar na mesma máquina, o valor do DISPLAY (no lugar do ____) deve ser :0, echo $DISPLAY (em um emulador de terminal) pra confirmar. Se for remoto, tem que especificar junto o nome e domínio. O xserver também deve permitir a conexão, o correto seria via xauth, mas já que é só um teste, em um terminal digite xhost + (pra permitir qualquer um) e depois que rodar o script, xhost - (restaurar).

-------link
http://www.tldp.org/HOWTO/Remote-X-Apps-5.html

Ok, é uma solução elegante, mas suponho que não é exatamente isso que o jtmdias queria. Sua solução exige que o aplicativo exista no servidor. O que jtmdias queria era abrir uma aplicação do lado cliente, pelo browser... Ou seja, a aplicação tem que existir no cliente, não no servidor.

jtmdias

Eu acho que não perceberam. Embora o cliente e o servidor sejam coisas distintas, estão os dois na mesma máquina.
Eu quero dar-lhes a opção de iniciar a aplicação clicando num link como "Abrir Filezilla FTP".

Para que eles possam abrir directamente do browser. Os clientes não estão noutro local, nem noutra rede.
Como vai ser uma distro para alunos das áreas de design, programação, etc, ela já vem com o LAMPP a correr por defeito.
sudo apt-get moo

irtigor

Mas o X só funciona dessa forma (cliente-servidor). Lê novamente, que a solução é essa que falei.