working shell_exec not example ejemplos ejecutar desde activar php cmd exec exe shell-exec

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.