Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Alessandro Pellizzari Newsgroups: it.comp.www.php Subject: Re: intercettare php://stdout Date: Thu, 19 Jan 2017 10:57:51 +0000 Lines: 62 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net nxLVR0PMOojvgT+XDewv8gT47OsoE7JTEtdC7MeXKROXreJFM= Cancel-Lock: sha1:yKO6/DKEVP22l3J40lXe6zTIWU4= User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 In-Reply-To: Xref: csiph.com it.comp.www.php:21378 On 19/01/2017 10:15, alex wrote: > Il 19/01/2017 09:03, g4b0 ha scritto: >> Dipende dal contesto in cui sei. Tralasciando i syntax error che hai >> postato, > > ???? Hai scritto stout/sterr invece di stdout/stderr. >> genericamente parlando stderr é lo stream di errore, mentre >> stdout é lo stream di output. > > si Per precisare: sono gli stream del processo che esegue il codice. Quindi di mod_php nel caso di Apache o FPM, e di php-cli nel caso appunto di Pphp-cli. > Da terminale: > > $ firefox http://local/test.php > > e quindi voglio che certi dati (di debug) venissero visualizzati nella > console (terminale), e non nella pagina web. > Si può? No. "Shell" significa "conchiglia", perché i processi che ci lanci sono "chiusi dentro" l'ambiente della shell stessa. Quindi stdout e stderr di firefox sono una cosa. stdout e stderr del webserver sono un'altra. Puoi fare un pstree per vedere il nesting dei processi. Avrai qualcosa tipo init --- bash --- firefox |- apache --- apache --- mod_php --- test.php |- apache --- mod_php --- test.php ... Come vedi per mandare output da mod_php alla bash di firefox dovresti risalire apache (child) -> apache (parent) -> init e poi ridiscendere init -> bash Visto che init se ne sbatte di tutto (tranne che degli zombie), e che apache ha forkato come daemon (droppando stdout e stderr, quindi mandando qualsiasi cosa nel limbo), non puoi. Quello che succede di solito è che da test.php ordini a mod_php di scrivere sul suo stderr qualcosa (con la funzione che hai scritto). Apache (child) intercetta lo stderr di mod_php e lo scrive su un log, per poi scartarlo. Non c'è una risalita verso l'alto, perché quella è riservata agli errori che il child vuole comunicare al parent. Bye.