2012-07-03 17 views
7

Utilizzando PHP 5.3 come php5_module in Apache 2.2 su Windows 7.PHP stdout su Apache

dove viene stdout vanno nella configurazione di cui sopra?

testati con codice seguente:

<?php 
    $stdout = fopen('php://stdout', 'w'); 
    fwrite($stdout, "stdout<br />\n"); 

    $output = fopen('php://output', 'w'); 
    fwrite($output, "output<br />\n"); 
?> 

Questo viene visualizzato solo output nel browser. Cosa succede allo stdout?

+0

Controllare i log di apache e/o php, poiché questo fa riferimento allo stream 'stdout' del processo PHP, suppongo che sia dove viene inviato. – nickb

+0

Non nei registri Apache o PHP. L'output stderr di PHP è nel log di apache. – tkocjan

risposta

18

Come mostra manuali nella pagina php:// wrappers manuale:

php: // output è un flusso di sola scrittura che permette di scrivere al meccanismo di buffer di uscita nello stesso modo come stampa e echo.

Quindi, se si vuole scrivere output al browser, utilizzare php://output

D'altra parte, php://stdout

consentono l'accesso diretto al flusso di ingresso o di uscita corrispondente del processo PHP .

Nel caso di Apache, questa uscita è maniglia stdout di Apache che è generalmente mai visto da nessuna parte, perché questo è l'uscita della console per Apache e di solito è eseguito in background. Se dovessi eseguire Apache in primo piano sulla tua console, tutto ciò che scrivi su php://stdout sarebbe visibile sulla console. Poiché Apache viene eseguito in background, nessun dato stdout viene acquisito o scritto ovunque normalmente.

Per verificare ciò, attenersi alla seguente procedura:

  • eseguire Apache in primo piano (ad es /usr/local/apache2/bin/httpd -D FOREGROUND -k start)
  • lasciare la finestra della console aperta
  • eseguire lo script dal browser
  • look per il tuo stdout output sulla console.