2012-01-08 50 views
22

estoy corriendo en un proyecto que lee una corriente desde un archivo txt, por lo que en la CLI, escribo:Cómo utilizar la salida estándar en php

cat texte.txt|php index.php 

En mi archivo index.php leí la corriente:

$handle = fopen ("php://stdin","r"); 

ahora tengo una $result que contiene el resultado de mi archivo de procesamiento y quiero salida con STDOUT, me miraba en el manual, pero no sé cómo usarlo, puede usted por favor me hacen una usar ejemplo.

+3

¿Qué has intentado? ¿Lo intentaste? 'print' y' echo'? –

+0

sí, pero los requisitos de mi proyecto son usar STDOUT, ¿se imprime y se repite parte de la secuencia STDOUT? – Malloc

+0

sí, eco estándar e impresión como @Cicada escribió para STDOUT. – hakre

Respuesta

35

Está bien, te voy a dar otro ejemplo para el uso STDIN y STDOUT.

En PHP utiliza estas dos expresiones:

$input = fgets(STDIN); 

fwrite(STDOUT, $output); 

Cuando desde la línea de comandos se utilizan como tales:

cat "input.txt" | php script.php > "output.txt" 

php script.php <input.txt> output.txt 

echo "input..." | php script.php | sort | tee output.txt 

Eso es todas estas cosas. Tubería o tubería. Y las partes entrantes aparecerán en STDIN, mientras que su salida debería ir a STDOUT. ¡Nunca cruce las corrientes, amigos!

+0

¿Estas dos corrientes de algún uso en un contexto de aplicación web? – Sajuuk

+0

Normalmente no. Solo utiliza echo/print/STDOUT para enviar salida al servidor web + cliente. Todo lo enviado a través de STDERR terminaría en el error.log de los servidores web (si está configurado). – mario

12

esto debería funcionar para usted

$out = fopen('php://output', 'w'); //output handler 
fputs($out, "your output string.\n"); //writing output operation 
fclose($out); //closing handler 
+0

Esto es totalmente exagerado. –

+2

@Cicada: Well * overkill *? ;) – hakre

+0

no entiendo lo que está mal con la respuesta ... lo intenté y funcionó ((: creo que la mala commentación causó esto. –

15

Las constantes STDIN y STDOUT ya están los recursos, por lo que todo lo que tiene que hacer es

fwrite(STDOUT, 'foo'); 

Ver http://php.net/manual/en/wrappers.php

php:// stdin, php: // stdout y php: // stderr permiten el acceso directo a la corresponsalía onding flujo de entrada o salida del proceso de PHP. La secuencia hace referencia a un descriptor de archivo duplicado, por lo que si abre php: // stdin y luego lo cierra, solo cierra su copia del descriptor: la transmisión real a la que hace referencia STDIN no se ve afectada. Tenga en cuenta que PHP exhibió un comportamiento defectuoso en este sentido hasta PHP 5.2.1. Se recomienda que simplemente use las constantes STDIN, STDOUT y STDERR en lugar de abrir manualmente las transmisiones utilizando estas envolturas.

+4

'PHP Advertencia: fwrite() espera que el parámetro 1 sea recurso, cadena dada en 'PHP 5.4 while' $ out = fopen ('php: // stdout', 'w'); 'works – vladkras

Cuestiones relacionadas