Como você executar um arquivo .bat do PHP?
-
08-07-2019 - |
Pergunta
Alguém pode me dizer como executar um arquivo .bat a partir de um script PHP?
Eu tentei:
exec("C:\[path to file]");
system("C:\[path to file]");
Nada está funcionando. Eu verifiquei os manuais PHP e pesquisei em torno mas não consegue encontrar uma boa resposta. Alguém sabe onde eu estou indo errado?
Estou executando o Windows 2003 Server e ter sucesso executar manualmente o arquivo .bat e ele faz o que eu preciso que ele; Eu só preciso ser capaz de lançá-lo através de programação.
Solução
Você pode precisar executá-lo via cmd
, por exemplo:
system("cmd /c C:[path to file]");
Outras dicas
<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>
Quando você usa a função exec()
, é como se você tem um cmd
terminal aberto e está digitando comandos diretamente para ele.
Use aspas simples como esta $str = exec('start /B Path\to\batch.bat');
O /B
significa o morcego será executado em segundo plano para o resto do php vai continuar depois de executar essa linha, ao contrário de $str = exec('start /B /C command', $result);
onde command
é executado e, em seguida, result
é armazenada para uso posterior.
PS: Ele funciona tanto para Windows e Linux.
Mais detalhes aqui http://www.php.net/manual/en/function.exec .php :)
<?php
pclose(popen("start /B test.bat", "r")); die();
?>
na minha máquina Windows 8 máquina que executa o IIS 8 I pode executar o arquivo de lote apenas colocando o nome morcegos e forgettig o caminho para ele. Ou, colocando o taco em c: \ windows \ system32 Não me pergunte como ele funciona, mas ele faz. LOL
$ test = shell_exec ( "c: \ windows \ system32 \ cmd.exe / c $ streamnumX.bat");
Este trecho é de código de trabalho.
Você pode desencadear bat não só a partir do Windows GUI ou o Agendador de Tarefas, mas diretamente do script PHP quando você precisar dele. Mas na maioria dos casos, terá de execução para 30-60 seg. dependendo da sua configuração do PHP. Se o trabalho no arquivo BAT é longo e você não quiser congelar seus scripts PHP, você precisa desembolsar trabalho BAT como um outro processo usando php.exe
e não ser confiável de Apache.
Este é executado em background Modo no Windows, vistos como processos separados cmd.exe
e php.exe
do Gerenciador de tarefas não travar seus scripts Apache PHP. As mensagens produzidas pelo seu script podem ser armazenados e recuperados para trás por meio de arquivos de log.
No meu caso em file_scanner.php
I fazer alguns cálculos pesados ??em loop para grande variedade de arquivos que podem durar algumas horas com função php sleep()
não CPU sobrecarga.
O resultado sucesso Poiner de $r
arquivo que você pode consultar via ajax se você quer saber o sucesso ou o início fauty. No meu caso file_scanner.php
escreve arquivo de log com mensagens somefile.jpg - OK
qual você pode carregar a sua interface com o AJAX a cada poucos segundos para mostrar o progresso.
PHP
/**
* Runs bat file in background mode
*
*/
function run_scanner() {
$c='start /b D:\Web\example.com\tasks\file_scanner.bat';
$r=pclose(popen($c, 'r'));
return json_encode(array('result'=>$r));
}
BAT
@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit