working shell_exec not funciona example ejemplos php shell command exec

shell_exec - php system vs exec



PHP shell_exec() vs exec() (4)

Aquí están las diferencias. Tenga en cuenta las nuevas líneas al final.

> shell_exec(''date'') string(29) "Wed Mar 6 14:18:08 PST 2013/n" > exec(''date'') string(28) "Wed Mar 6 14:18:12 PST 2013" > shell_exec(''whoami'') string(9) "mark/n" > exec(''whoami'') string(8) "mark" > shell_exec(''ifconfig'') string(1244) "eth0 Link encap:Ethernet HWaddr 10:bf:44:44:22:33 /n inet addr:192.168.0.90 Bcast:192.168.0.255 Mask:255.255.255.0/n inet6 addr: fe80::12bf:ffff:eeee:2222/64 Scope:Link/n UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1/n RX packets:16264200 errors:0 dropped:1 overruns:0 frame:0/n TX packets:7205647 errors:0 dropped:0 overruns:0 carrier:0/n collisions:0 txqueuelen:1000 /n RX bytes:13151177627 (13.1 GB) TX bytes:2779457335 (2.7 GB)/n"... > exec(''ifconfig'') string(0) ""

Tenga en cuenta que el uso del operador shell_exec() es idéntico a shell_exec() .

Actualización: Realmente debería explicar eso último. Mirando esta respuesta años después, ¡ni siquiera sé por qué quedó en blanco! Daniel lo explica arriba, es porque exec solo devuelve la última línea, y la última línea de ifconfig está en blanco.

Estoy luchando para entender la diferencia entre shell_exec() y exec() ...

Siempre he usado exec() para ejecutar comandos del lado del servidor, ¿cuándo usaría shell_exec() ?

¿ shell_exec() solo una abreviatura de exec() ? Parece ser lo mismo con menos parámetros.


Un par de distinciones que no fueron tocadas aquí:

  • Con exec (), puede pasar una variable param opcional que recibirá una matriz de líneas de salida. En algunos casos, esto puede ahorrar tiempo, especialmente si la salida de los comandos ya es tabular.

Comparar:

exec(''ls'', $out); var_dump($out); // Look an array $out = shell_exec(''ls''); var_dump($out); // Look -- a string with newlines in it

A la inversa, si la salida del comando es xml o json, tener cada línea como parte de una matriz no es lo que desea, ya que tendrá que postprocesar la entrada en algún otro formulario, por lo que en ese caso use shell_exec .

También vale la pena señalar que shell_exec es un alias para el operador backtic, para aquellos que están acostumbrados a * nix.

$out = `ls`; var_dump($out);

exec también admite un parámetro adicional que proporcionará el código de retorno del comando ejecutado:

exec(''ls'', $out, $status); if (0 === $status) { var_dump($out); } else { echo "Command failed with status: $status"; }

Como se indicó en la página de manual de shell_exec, cuando realmente necesita un código de retorno del comando que se está ejecutando, no tiene más remedio que usar exec.