Il linguaggio di programmazione PHP
 

intercettare php://stdout

alex 19 Gen 2017 08:49
file_put_conents('php://sterr', ...);

e l'output mi va a finire in

/var/log/apache2/error.log

Però se invece di 'php://sterr' uso 'php://stout', l'output dove viene
scritto?
g4b0 19 Gen 2017 09:03
On 19/01/2017 08:49, alex wrote:
> ******* put_conents('php://sterr', ...);
>
> e l'output mi va a finire in
>
> /var/log/apache2/error.log
>
> Però se invece di 'php://sterr' uso 'php://stout', l'output dove viene
> scritto?

Dipende dal contesto in cui sei. Tralasciando i syntax error che hai
postato, genericamente parlando stderr é lo stream di errore, mentre
stdout é lo stream di output.

Da ció che scrivi stai lavorando con Apache, per cui stderr é il *******
definito con la direttiva ErrorLog, mentre stdout é la console del
processo in esecuzione, che normalmente é in background e quindi viene
persa, a meno di redirezioni poco usuali. Se facessi girare Apache in
foreground [1] vedresti quanto scritto in stdout.

Se vuoi scrivere sullo stream inviato al browser puoi usare
'php://output', che é l'equivalente di print ed echo.

Maggiori info, come al solito, possono essere recuperate sul manuale
online: http://www.php.net/manual/en/wrappers.php.php

[1] esempio: /usr/local/apache2/bin/httpd -D FOREGROUND -k start

--
g4b0, linux user n. 369000
http://brosulo.net
alex 19 Gen 2017 11:15
Il 19/01/2017 09:03, g4b0 ha scritto:
> Dipende dal contesto in cui sei. Tralasciando i syntax error che hai
> postato,

????

> genericamente parlando stderr é lo stream di errore, mentre
> stdout é lo stream di output.
>

si

> Da ció che scrivi stai lavorando con Apache, per cui stderr é il ******* >
definito con la direttiva ErrorLog, mentre stdout é la console del
> processo in esecuzione, che normalmente é in background e quindi viene
> persa, a meno di redirezioni poco usuali. Se facessi girare Apache in
> foreground [1] vedresti quanto scritto in stdout.
>

Sai in realtà cosa voglio fare?

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ò?
g4b0 19 Gen 2017 11:54
On 19/01/2017 11: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,
>
> ????
******* put_conents('php://sterr', ...);

^ ^
manca t manca d

>> Da ció che scrivi stai lavorando con Apache, per cui stderr é il ******* >>
definito con la direttiva ErrorLog, mentre stdout é la console del
>> processo in esecuzione, che normalmente é in background e quindi viene
>> persa, a meno di redirezioni poco usuali. Se facessi girare Apache in
>> foreground [1] vedresti quanto scritto in stdout.
>>
>
> Sai in realtà cosa voglio fare?
>
> 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ò?

Non cosí. Per debuggare PHP in questo modo puoi provare Clockwork, o
forse xdebug con qualche estensione per il browser. Ma non l'ho mai
fatto, mi trovo bene con xdebug e Netbeans (quando funziona).


--
g4b0, linux user n. 369000
http://brosulo.net
Alessandro Pellizzari 19 Gen 2017 11:57
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 ******* -> 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 ******* 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 ******* vuole comunicare al parent.

Bye.
alex 19 Gen 2017 12:39
Il 19/01/2017 11:54, g4b0 ha scritto:
> On 19/01/2017 11: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,
>>
>> ????
>
> ******* put_conents('php://sterr', ...);
>
> ^ ^
> manca t manca d
>

:D :D :D :D :D :D :D :D :D
È un esempio, e dai che si capisce lo stesso...
:D :D :D :D :D :D :D :D :D :D
Ironia :D :D :D

> Non cosí. Per debuggare PHP in questo modo puoi provare Clockwork, o
> forse xdebug con qualche estensione per il browser. Ma non l'ho mai
> fatto, mi trovo bene con xdebug e Netbeans (quando funziona).

Ok!!!
alex 19 Gen 2017 12:46
Il 19/01/2017 11:57, Alessandro Pellizzari ha scritto:
> Non c'è una risalita verso l'alto, perché quella è riservata agli errori
> che il ******* vuole comunicare al parent.

grazie delle info :)

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione PHP | Tutti i gruppi | it.comp.www.php | Notizie e discussioni php | Php Mobile | Servizio di consultazione news.