Estoy tratando de ejecutar dos comandos dmd simultáneamente usando PHP shell_exec() . Un comando ejecuta Tshark durante 5 segundos. El segundo comando ejecuta un archivo .exe . Tshark es un programa que captura paquetes de red que se transfieren a través de una interfaz de red. El segundo programa (llamado mtu.exe) envía paquetes de red desde mi máquina local a una máquina remota.
La cosa es que cuando ejecuto estos comandos manualmente , ejecuto el primer comando. Un momento después de eso, ejecuto el segundo, y todo va bien y en aproximadamente un segundo, los paquetes esperados son transferidos por mtu.exe y son capturados por tshark.exe . Todo funciona perfectamente bien.
Pero luego, cuando ejecuto el siguiente script para ejecutar estos comandos, obtengo el siguiente resultado:
$firstCommand = '"C:\Program Files\Wireshark\tshark.exe" -a duration:5 -w capture.pcapng 2>&1'; echo $firstCommand."<br><br>"; $secondCommand = "mtu.exe -d0 -a43020008 -g43010008 -i987654321 -s"Merry Xmass" 2>&1"; echo $secondCommand."<br><br>"; echo shell_exec($firstCommand . " && " . $secondCommand);Producción:
"C:\Program Files\Wireshark\tshark.exe" -a duration:5 -w capture.pcapng 2>&1 mtu.exe -d0 -a43020008 -g43010008 -i987654321 -s"Merry Xmass" 2>&1 Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\Test\index.php on line 10 La línea 10 es la línea donde shell_exec() . La pregunta ¿cómo solucionar este problema? ¿Por qué está pasando esto?
Ejecute tshark en segundo plano con & para que el shell no espere a que finalice antes de ejecutar mtu . Luego use el comando de wait para esperar a que finalice el comando de fondo.
echo shell_exec($firstCommand . " & " . $secondCommand . "; wait");Esta es la sintaxis de shell de Unix, no sé si hay algo equivalente en Windows cmd.