php - example - shell_exec not working
Dos comandos se ejecutan correctamente de forma manual pero fallan cuando se ejecutan en shell_exec(), dando error TimeOut (1)
Estoy intentando ejecutar dos comandos shell_exec()
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 un segundo aproximadamente, 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);
Salida:
"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 está el shell_exec()
. ¿La pregunta de cómo solucionar este problema? ¿Por qué está pasando esto?
Ejecute tshark
en el fondo con &
así que el shell no espera a que termine antes de ejecutar mtu
. A continuación, use el comando wait para esperar a que finalice el comando de fondo.
echo shell_exec($firstCommand . " & " . $secondCommand . "; wait");
Esta es la sintaxis del shell de Unix, no sé si hay algo equivalente en Windows cmd.