|
Correr PHP en segundo plano como CLI desde una página PHP web |
Usar la función System()
Si ejecutamos un programa con esta función y queremos dejarlo ejecutándose en segundo plano, hay que asegurarse que la salida del mismo es redireccionada a un fichero u otro flujo de salida o PHP se quedará esperando hasta que la ejecución del programa termine.
Frito el pescadito. Sólo me restaba averiguar cómo redireccionar la salida hacia otro lado y es aquí donde una vez más, super Google hace su entrada y ZAZ! aparecieron por arte de magia estas páginas para sacarme de apuros: Running a Background Process from PHP on Linux y 10 cosas que quizás no sabías de PHP en la shell, vamos lean un poco y saquen sus propias conclusiones que aquí les van las mías:
En nuestro archivo PHP llamamos a la función system y le pasamos nuestros parámetros:
>out.txt 2>>error.txt &" ); ?>
¿Qué quisimos decir con esto?
Si se va a permitir que datos provenientes del usuario sean enviados a esta función, habría que utilizar escapeshellarg() o escapeshellcmd() para asegurarse que el usuario no intenta engañar al sistema para que ejecute comandos arbitrarios. Siempre es mejor tomar precauciones demás antes que terminar lamentándose por dejar huecos que puedan ser aprovechados por otros.
A nuestra función system() solo le pasamos como parámetro el comando que va a ejecutar seguido por variables que consideremos adecuadas seguido del caracter >> o en su defecto > que le indican a la función que la salida del programa se grabe en un archivo de texto de nombre out.txt (la diferencia entre poner doble o solo un signo mayor, es que si le pones solo uno le estás diciendo que sobrescriba el archivo de texto cada vez que llame a la función, en cambio con >> se va agregando la salida de la nueva llamada por debajo).
Lo que sigue del 2>>error.txt es una joyita más que encontré por esta página Bash scripting de supervivencia, y es que este “2” significa el flujo de errores generado por la ejecución del comando y lo grabamos también en un archivo de texto, nunca está demás información como esta para saber qué podemos estar haciendo mal, como se dice: es mejor que so-sobre a que so-falte, o algo por el estilo.
Para poder recibir los parámetros que le pasamos al PHP por consola tenemos a nuestra disposición esto $argv, que es una de las tantas variables predefinidas que hay en PHP que contiene un array de todos los argumentos pasados a un script cuando se ejecuta desde la línea de comandos.
Ya vamos terminando con esto, creo que lo alargue mucho (¿CREES? Y TODAVÍA PREGUNTAS!!! )
Bueeeno, ojala lo hayan entendido y les sirva de algo en sus futuros proyectos (o por lo menos me conformo con que lo hayan terminado de leer 8P)
Gracias por su compañía, cualquier duda que surja no duden en comentar que estaré más que contento de ayudarles (si estoy de ganas claro ¬¬). |
URL DE REFERENCIA: https://locotech.wordpress.com/2011/08/25/php-ejecutar-un-script-en-segundo-plano/ |