PhP capturar salida programa

Ulmo

Buenas, tenia una pequeña dudilla con una pagina web y tras pelearme bastante con google y no encontrar solucion, he pensado q quizas es una tonteria y aqui en un momento me lo podriais solucionar.

La cuestion es q tengo una pagina web q ejecuta un programa, quiero ir printando por pantalla lo que va escribiendo dicho programa por su salida estandar y por su salida de error, pero como el programa tarda mucho, no quiero hacerlo al final de su ejecución sino q vaya saliendo en la web segun lo vaya generando el programa.

Me parece q passthru() no hace exactamente eso, y tanto exec() como system() guardan el output en una variable que una vez finalizado el programa puedes printar.

Logicamente la opcion cutre es correr el programa en background redirigiendo las salidas a un archivo y con un while() ir leyendolo constantemente, ¿ no existe una forma directa de hacerlo ?

Existir esta claro q existe cualquier cosa q imagines, digo alguna forma sencilla mediante php.

Graacias.

NeB1

me callo :P

LOc0
<?php

ob_implicit_flush(TRUE);

$tuberia = popen('/bla/bla/comando_que_tarda_mucho 2>&1', 'r');

while(($c=fgetc($tuberia))!==FALSE)
      echo $c;

pclose($tuberia);

ob_implicit_flush(FALSE);

?>

EDITADO: versión que te saca las líneas una encima de otra:

<?php 

ob_implicit_flush(TRUE);

$tuberia = popen('comando 2>&1', 'r');

while(feof($tuberia)===FALSE)
      echo nl2br(fgets($tuberia));

pclose($tuberia);

ob_implicit_flush(FALSE);

?>

Salu2 ;)

bLaKnI

Coño... xD
No sabia que habia pipes en PHP... madre mia!

Si tuvieras tuberias tu verias tuberias!

eXtreM3

#4 me has dejao loco con la última frase jajajaajajJAAJAJAJAJA, la he leio 5 o 6 veces xDDD

Ulmo

#3 He probado la primera opcion y efectivamente me printa la salida, pero vuelve a hacerlo al final. Basicamente de prueba tengo un pequeño shellscript q hace echo sleep y echo.

Supongo q se queda clavado en la llamada popen y hasta q no finaliza el programa no hace los echo de php.

No se, es raro, creo q al final acabaré optando por la forma cutre de printarlo sobre un archivo e irlo leyendo.

Muchas gracias por tu respuesta!!!

Usuarios habituales

  • Ulmo
  • eXtreM3
  • bLaKnI
  • LOc0
  • NeB1