Inicio » Más con Symfony » Descubriendo el poder de la línea de comandos (segunda parte) » Utilizando STDIN
Utilizando STDIN
Como las tareas se ejecutan en una consola de comandos, también tienes acceso
a la entrada estándar STDIN. En UNIX, las aplicaciones pueden interactuar entre
si de muchas formas diferentes, una de las cuales se denomina pipe o tubería
y se simbolizan mediante el carácter |. El pipe permite conectar la salida
de una aplicación (conocida como STDOUT) con la entrada estándar de otra
aplicación (conocida como STDIN). Tanto la entrada como la salida estándar
son accesibles desde las tareas de Symfony mediante unas constantes especiales
de PHP denominadas STDIN y STDOUT. Existe otra constante especial llamada
STDERR preparada para mostrar los mensajes de error de las aplicaciones.
¿Qué se puede hacer con la entrada estándar? Imagina que dispones en tu servidor
de una aplicación que se quiere comunicar con Symfony. Por supuesto podría
comunicarse mediante HTTP, pero una forma mucho más eficiente de hacerlo sería
mediante un pipe de su salida a la entrada de la tarea de Symfony. Supongamos
que la aplicación puede generar datos estructurados (por ejemplo un array PHP
serializado) que describe los objetos que se deben insertar en la base de datos.
En este caso, se podría escribir una tarea como la siguiente:
while ($content = trim(fgets(STDIN)))
{
if ($data = unserialize($content) !== false)
{
$object = new Object();
$object->fromArray($data);
$object->save();
}
}
Ahora ya podrías conectar las dos mediante el siguiente comando:
/usr/bin/data_provider | ./symfony data:import
data_provider es la aplicación que genera los objetos y data:import es la
tarea que se acaba de crear.
Puedes sugerir, comentar, criticar e informar de errores en contacto (arroba) librosweb.es