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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top