¿Por qué prefiere evitar el uso de comandos bash a través de exec()
en php?¿Por qué no debería usar comandos de Unix de php?
No considero el problema de la portabilidad (definitivamente no lo portaré para ejecutarlo en Windows). Esa es solo una cuestión de una buena forma de escribir guiones.
Por un lado:
- tengo que escribir mucho más líneas en php a continuación, en bash para llevar a cabo la misma tarea. Por ejemplo, cuando necesito filtrar algunas líneas en un archivo, simplemente no puedo crear imágenes usando algo en lugar de
cat file | grep string > new_file
. Esto tomaría mucho más tiempo y esfuerzo para hacer en php. - No quiero analizar todas las situaciones cuando algo puede salir mal. Simplemente mostraré el resultado del comando bash al usuario, para que él supiera exactamente qué sucedió.
- No necesito escribir otro contenedor sobre las funciones del sistema de archivos y usarlo. Es mucho más eficiente para aprovechar el sistema operativo para la búsqueda de archivos, manipulación, etc.
Por otro lado:
- Llamada de comandos UNIX con
exec()
podría ser ineficaz en la mayoría de los casos. Es bastante costoso generar un proceso separado. No se trata de secuencias de comandos que se ejecutan en Apache, que es incluso mucho menos eficiente que la creación de scripts de línea de comandos. - A veces resulta ser 'magia negra' y secuencias de comandos perl. Aunque se puede evitar a través de comentarios detallados.
- Tal vez estoy tratando de usar dos herramientas diferentes juntas cuando se supone que no deben hacerlo. Cada herramienta tiene su propia aplicación y no debe mezclarse.
- Aunque estoy seguro de que los usuarios no intentarán ejecutar secuencias de comandos con propósitos maliciosos, usar
exec()
es una posible amenaza a la seguridad. En la mayoría de los casos, los datos del usuario se pueden escapar conescapeshellarg()
, pero aún así es un problema a tener en cuenta.
Si llama a scripts bash para filtrar algunas líneas en un archivo, entonces lo está haciendo mal. Creo que su número 2 y 3 enumerados en "por otro lado" son exactamente la razón por la que no hace esto. – GreenieMeanie