Pregunta

¿Alguien puede decirme cómo ejecutar un archivo .bat desde un script PHP?

He intentado:

exec("C:\[path to file]");
system("C:\[path to file]");

Nada funciona. Revisé los manuales de PHP y busqué en Google, pero no puedo encontrar una buena respuesta. Alguien sabe a dónde voy mal?

Estoy ejecutando Windows 2003 Server y ejecuté con éxito manualmente el archivo .bat y hace lo que necesito; Solo necesito poder iniciarlo programáticamente.

¿Fue útil?

Solución

Puede que necesite ejecutarlo a través de cmd , por ejemplo:

system("cmd /c C:[path to file]");

Otros consejos

<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>

Cuando utiliza la función exec () , es como si tuviera un terminal cmd abierto y está escribiendo comandos directamente en él.

Use comillas simples como esta $ str = exec ('start / B Path \ to \ batch.bat');
El / B significa que el bate se ejecutará en segundo plano, por lo que el resto del php continuará después de ejecutar esa línea, en lugar de < código> $ str = exec ('comando de inicio / B / C', $ resultado); donde se ejecuta el comando y luego el resultado se almacena para su uso posterior.

PS: Funciona tanto para Windows como para Linux.
Más detalles están aquí http://www.php.net/manual/en/function.exec .php :)

<?php
 pclose(popen("start /B test.bat", "r")); die();
?> 

en mi máquina con Windows Machine 8 que ejecuta IIS 8 Puedo ejecutar el archivo por lotes con solo poner el nombre del murciélago y olvidar la ruta. O poniendo el bate en c: \ windows \ system32 no me preguntes cómo funciona pero funciona. LOL

$ test = shell_exec (" C: \ windows \ system32 \ cmd.exe / c $ streamnumX.bat ");

Este fragmento es del código de trabajo.

Puede activar el archivo bat no solo desde la GUI de Windows o el Programador de tareas, sino directamente desde el script PHP cuando lo necesite. Pero en la mayoría de los casos tendrá ejecución durante 30-60 segundos. dependiendo de su configuración de PHP. Si el trabajo en el archivo BAT es largo y no desea congelar sus scripts PHP, debe bifurcar el trabajo BAT como otro proceso usando php.exe y no depender de Apache.

Esto se ejecuta en modo fondo en Windows, visto como procesos separados cmd.exe y php.exe desde el Administrador de tareas que no detiene su Apache PHP scripts Los mensajes producidos por su script pueden almacenarse y recuperarse a través de archivos de registro.

En mi caso en file_scanner.php hago algunos cálculos pesados ??en bucle para una gran variedad de archivos que pueden durar unas pocas horas con la función php sleep () para no sobrecarga de la CPU.

El resultado del puntero de éxito del archivo $ r que puede consultar a través de ajax si desea conocer el éxito o un inicio erróneo. En mi caso, file_scanner.php escribe un archivo de registro con mensajes somefile.jpg - OK que puede cargar en su UI con AJAX cada pocos segundos para mostrar el progreso.

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top