Chamar executável dentro do ScriptCase

Bom dia a todos.

Dias atrás abri o seguinte tópico:


Porém percebi que o uso dessa DLL, mesmo que funcionasse, seria inviável uma vez que o meu gerador dessa DLL, por assim dizer, tem um jeito peculiar de gerar. Ela é gerada por uma ferramenta CASE que coloca uma série de particularidades e a chamada se torna muito complicada.

Antes do questionamento gostaria de explicar o meu caso:

  • Tenho um sistema Windows embarcado utilizando C# que eu quero passar para o PHP usando o ScriptCase como CASE e como Framework. Mas inicialmente eu preciso poupar tempo com os cálculos mais complexo. Assim eu preciso de uma maneira de invocar os objetos que fazem esses cálculos enquanto não converto todas as procedures do sistema em PHP.

Voltando ao caso, essa mesma ferramenta CASE tem a capacidade de gerar essas DLLs como executáveis e eu consigo chamar esses executáveis via linha de comando passando os parâmetros para processamento diretamente na linha de comando.

Existe um tópico no fórum que fala sobre como chamar programas executáveis dentro do SC, porém nem server side nem client side a página funcionou. Tentei chamar o Notepad do Windows e sim, eu fiz o ajuste de chamada para cada plataforma.

Alguém tem alguma sugestão??

Grato,

Scriptcase é php. Se seu php tiver permissões para acessar comandos do SO, o comando é execute ou system.

Olá,

Se o exe ficar maquina local vai ter que fazer uma ponte, talvez com JavaScript, acho que não vai conseguir abrir arquivo local pelo servidor, a não ser que rode o php na mesma maquina que esta o executavel, ai pode usar passthru , exec ou shell_exec, mas o php em um local e programa em outro não vai conseguir fazer isto.

Mais uma vez obrigado! Consegui andar um passo!!

Jair, bom dia.

Meu SC roda em um servidor dedicado Windows 2008 R2. Mas na minha máquina (para fins de testes de código PHP puro) tenho instalado um Apache 2.4 rodando PHP 7.3.

Eu coloquei o aplicativo do Windows diretamente na pasta C:\apache24\htdocs e com isso consegui criar um código PHP através do comando system que invoca esse executável e faz o que eu preciso.

Ou seja, parte do meu problema está resolvido pois eu sei que o PHP tem a capacidade de invocar o executável. PORÉM essa aplicação precisa rodar no servidor para que todos os usuários tenham acesso.

Mas ainda fica uma pergunta:

  • Tem alguma ideia de onde devo colocar o código Windows dentro do SC para que eu possa invocar via PHP??

Grato!

Se o aplicativo executável está no cliente e o php no servidor
Terá que instalar apenas o apache e php no cliente e na chamada usar http://localhost/executa.php para executar o app executável do cliente

Olá,

se a instalaçao esta como o @InfinitusWeb falou, pode chamar direto do seu programa, sem mover ela de local, basta passar o caminho

poderia funcionar desta forma, só testando para ver:

$parametro = "algo"; //caso precise passar algum parâmetro para o executável
$chamaProgExec = "\"c:\\localdoprograma\\programa.exe" $parametro";
$retorno=system($chamaProgExec);
echo $retorno; // para caso tenha um retorno do executável que vá usar

Haroldo, bom dia.

Na realidade terei o SC e o aplicativo rodando no servidor.
Ou seja, preciso chamar o programa no servidor.

Grato!

Servidor (Nuvens):
app_sc --> executa: header(location: http://localhost/executa.php?param=$jason_pars);

Cliente(Local):
apache e php e app.exe
script executa.php:
system(“c:\pasta\app.exe $param”);

Aos que responderam e ajudaram nas pesquisas desejo bom dia.

Consegui resolver!
Abaixo segue o que fiz e como fiz:

  • Em primeiro lugar lembrar que o executável é gerado por mim. Assim sendo sei as variáveis e como invocar a aplicação via shell;
  • Não esquecendo também que por motivos de segurança aplicações web são impedidas de chamar executáveis fora do seu diretório (pelo menos de todos os testes que fiz nenhum funcionou);
  • Em primeiro lugar eu gerei o código dentro do SC chamando o prompt conforme indicado pelos senhores (esse exemplo está construído em uma blank para testes):
$string = 'agravarec "' . $Emp . '" ' . $lotea . '  ' . $lct . ' ' . $lcopit . ' "' . $dtr . '" ' . $vlr . ' ' . $vlm . ' ' . $vla . ' "' . $usu . '" "' . $ccocod . '" "' . $bco . '" "' . $avnr . '" "' . $recfor . '" "' . $recavnr . '" ' . $stpc. '  ' . $lcopvl . ' "' . $dtv . '"';

echo 'String : ' . $string . '<br/>';

echo exec($string,$output,$return_var);
echo 'output' . var_dump($output) . '<br/>';
echo 'return_var' . $return_var . '<br/>';
echo 'fim';
  • Então eu descarreguei o meu executável na mesma pasta que a blank. Funcionou!
    Dois adendos:
    1 - O inconveniente é que todas as vezes que eu altero e gero o código novamente o SC limpa essa pasta e eu preciso colocar o código executável novamente. Nada além de dois minutos.
    2 - Não entendi o porque, mas quando chamo o executável pelo PHP de um botão não funciona. Usando biblioteca interna ou em um método PHP da aplicação funcionou normalmente.

Se precisarem de ajuda ou dar uma olhada em como eu fiz contem comigo.

GRATO!!!

2 Curtidas

Ótima explicação Silmar.
Obrigado por ter partilhado connosco este exemplo, eu tentei fazer algo parecido antes mas não consegui e desisti…

Cumprimentos