¿Cuáles son las diferencias?
¿Existe una situación o razón específica para cada función? En caso afirmativo, ¿puede dar algunos ejemplos de esas situaciones?
PHP.net dice que se utilizan para ejecutar programas externos. ver referencia De los ejemplos que veo, no veo ninguna diferencia obvia.
Si simplemente ejecutara un script (bash o python), ¿qué función me recomienda usar?
proc_open()
ypopen()
, ambos permiten un mayor grado de control sobre el proceso generado.Respuestas:
Tienen propósitos ligeramente diferentes.
exec()
es para llamar a un comando del sistema y tal vez tratar con la salida usted mismo.system()
es para ejecutar un comando del sistema e inmediatamente mostrar la salida, presumiblemente texto.passthru()
es para ejecutar un comando del sistema del que desea el retorno sin procesar, probablemente algo binarioDe todos modos, te sugiero que no uses ninguno de ellos. Todos producen código altamente inportable.
fuente
izkata@izein:~$ dir -bash: dir: command not found
- FreeBSDexec
,system
,passthru
. El código PHP depende del entorno en el que se ejecuta, y muchos errores de seguridad se deben a que no tienen esto en cuenta. Aquí hay un ejemplo rápido: stackoverflow.com/questions/3003145/…Extraído de http://php.net/ && Chipmunkninja :
fuente
Las respuestas anteriores parecen ser un poco confusas o incompletas, así que aquí hay una tabla de las diferencias ...
Otras cosas diversas a tener en cuenta:
fuente
include
y amigosRealmente todo se reduce a cómo desea manejar la salida que el comando podría devolver y si desea que su script PHP espere a que el programa llamado termine o no.
exec
ejecuta un comando y pasa la salida a la persona que llama (o la devuelve en una variable opcional).passthru
es similar a laexec()
función en que ejecuta un comando. Esta función debe usarse en lugar deexec()
osystem()
cuando la salida del comando Unix son datos binarios que deben pasarse directamente al navegador.system
ejecuta un programa externo y muestra la salida, pero solo la última línea.Si necesita ejecutar un comando y hacer que todos los datos del comando pasen directamente sin ninguna interferencia, use la
passthru()
función.fuente
Si está ejecutando su script PHP desde la línea de comandos,
passthru()
tiene un gran beneficio. Le permitirá ejecutar scripts / programas comovim
,dialog
etc., permitiendo que esos programas manejen el control y regresen a su script solo cuando hayan terminado.Si usa
system()
oexec()
ejecuta esos scripts / programas, simplemente no funcionará.Gotcha: Por alguna razón, no puedes ejecutar
less
conpassthru()
PHP.fuente