2012-01-08 10 views
22

Sono in esecuzione in un progetto che leggere un flusso da un file txt, quindi nella CLI, scrivo:Come usare STDOUT in php

cat texte.txt|php index.php 

Nel mio file index.php ho letto il flusso:

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

Ora ho un $result contenente il risultato del mio file di trasformazione e voglio uscita con STDOUT, ho guardato nel manuale, ma non so come usarlo, potete per favore me fare un usa l'esempio

+3

Cosa hai provato? Hai provato anche tu? 'print' e' echo'? –

+0

sì, ma i miei requisiti di progetto sono di usare STDOUT, sono parte di stampa ed eco dello stream STDOUT? – Malloc

+0

sì, standard echo e stampa come @Cicada scritto va a STDOUT. – hakre

risposta

35

Va bene, mi permetta di darle un altro esempio per l'utilizzo STDIN e STDOUT.

In PHP si utilizzano questi due idiomi:

$input = fgets(STDIN); 

fwrite(STDOUT, $output); 

Quando dalla linea di comando che li utilizzano come tali:

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

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

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

che è tutte queste cose. Connessione o piping. E le parti in arrivo appariranno in STDIN, mentre l'output dovrebbe andare a STDOUT. Mai attraversare i flussi, gente!

+0

Questi due flussi sono di qualche utilità in un contesto di applicazione web? – Sajuuk

+0

Normalmente. Si utilizza echo/print/STDOUT per inviare l'output al client webserver +. Tutto ciò che viene inviato tramite STDERR finirebbe nel webserver error.log (se configurato). – mario

12

questo dovrebbe funzionare per voi

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

Questo è totalmente eccessivo. –

+2

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

+0

non capisco cosa c'è di sbagliato con la risposta .. ho provato e ha funzionato ((: penso che le cattive osservazioni abbiano causato questo. –

15

Le costanti STDIN e STDOUT sono già risorse, quindi tutto quello che dovete fare è

fwrite(STDOUT, 'foo'); 

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

php:// stdin, php: // stdout e php: // stderr consentono l'accesso diretto al corresp onding input o output stream del processo PHP. Lo stream fa riferimento a un descrittore di file duplicato, quindi se apri php: // stdin e successivamente lo chiudi, chiudi solo la tua copia del descrittore, il flusso effettivo a cui fa riferimento STDIN non viene modificato. Si noti che PHP ha esibito comportamenti buggy in questo senso fino a PHP 5.2.1. Si consiglia di utilizzare semplicemente le costanti STDIN, STDOUT e STDERR invece di aprire manualmente i flussi utilizzando questi wrapper.

+4

'PHP Warning: fwrite() si aspetta che il parametro 1 sia risorsa, stringa data in 'PHP 5.4 mentre' $ out = fopen ('php: // stdout', 'w'); 'funziona – vladkras