Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.www.php > #21348 > unrolled thread
| Started by | alex <1j9448a02@lnx159sneakemail.com.invalid> |
|---|---|
| First post | 2017-01-09 17:30 +0100 |
| Last post | 2017-01-11 15:27 +0000 |
| Articles | 5 — 3 participants |
Back to article view | Back to it.comp.www.php
cookie in ambiente CLI alex <1j9448a02@lnx159sneakemail.com.invalid> - 2017-01-09 17:30 +0100
Re: cookie in ambiente CLI fmassei@gmail.com - 2017-01-09 08:54 -0800
Re: cookie in ambiente CLI Alessandro Pellizzari <shuriken@amiran.it> - 2017-01-09 18:56 +0000
Re: cookie in ambiente CLI alex <1j9448a02@lnx159sneakemail.com.invalid> - 2017-01-11 11:37 +0100
Re: cookie in ambiente CLI Alessandro Pellizzari <shuriken@amiran.it> - 2017-01-11 15:27 +0000
| From | alex <1j9448a02@lnx159sneakemail.com.invalid> |
|---|---|
| Date | 2017-01-09 17:30 +0100 |
| Subject | cookie in ambiente CLI |
| Message-ID | <o50dqu$1oro$1@gioia.aioe.org> |
<?php // test.php
setcookie('id', 123);
echo $_COOKIE['id']."\n";
?>
Proviamo ad eseguirlo da terminale
$ php test.php
PHP Notice: Undefined index: id in tesr.php on line 3
Visto che siamo in ambiente CLI non c'è da stupirsi dell'errore alla riga 3.
Ma allora perchè la funzione setcookie() non da nessun errore? Non
dovrebbe essere in accordo..... ???
Non è che il cookie 'id' viene memorizzato da qualche altra parte?
In pratica la domanda generale sarebbe: c'è un modo per testare i cookie
in ambiente cli?
[toc] | [next] | [standalone]
| From | fmassei@gmail.com |
|---|---|
| Date | 2017-01-09 08:54 -0800 |
| Message-ID | <c4ea601d-d7cd-4591-8c38-68cf0ddd33c8@googlegroups.com> |
| In reply to | #21348 |
On Monday, January 9, 2017 at 11:30:25 AM UTC-5, alex wrote: > In pratica la domanda generale sarebbe: c'è un modo per testare i cookie > in ambiente cli? > Tendenzialmente la setcookie la richiama in una classe che gestisce i cookies (probabilmente insieme ad altra business logic); per metterla in test si fa un mock-up. Ciao!
[toc] | [prev] | [next] | [standalone]
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Date | 2017-01-09 18:56 +0000 |
| Message-ID | <edi4m3F66edU1@mid.individual.net> |
| In reply to | #21348 |
Il Mon, 09 Jan 2017 17:30:23 +0100, alex ha scritto:
> <?php // test.php setcookie('id', 123);
> echo $_COOKIE['id']."\n";
> ?>
>
> Proviamo ad eseguirlo da terminale
>
> $ php test.php PHP Notice: Undefined index: id in tesr.php on line 3
In realtà esce lo stesso errore anche su un browser:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
setcookie('id', 123);
echo $_COOKIE['id']."\n";
( ! ) Notice: Undefined index: id in /...cookie.php on line 5
Call Stack
# Time Memory Function Location
1 0.0000 355808 {main}( ) .../cookie.php:0
Questo perché setcookie() manda solo l'header, non aggiorna la superglobal
$_COOKIE
Siccome PHP inizializza le superglobal quando parte, non c'è modo di
metterci qualcosa (se non modificandole direttamente e manualmente) in
ambiente CLI: quando lo script viene eseguito sono già state
inizializzate.
> In pratica la domanda generale sarebbe: c'è un modo per testare i cookie
> in ambiente cli?
No, per quanto ho detto prima.
L'unico modo è far partire un webserver (anche quello integrato di PHP),
fare una richiesta tramite curl o simile, e verificare gli header di
quello che ti torna indietro.
O usare una classe per gestire i cookies e mockarla durante i test.
Bye.
[toc] | [prev] | [next] | [standalone]
| From | alex <1j9448a02@lnx159sneakemail.com.invalid> |
|---|---|
| Date | 2017-01-11 11:37 +0100 |
| Message-ID | <o551tg$u3l$1@gioia.aioe.org> |
| In reply to | #21350 |
Il 09/01/2017 19:56, Alessandro Pellizzari ha scritto:
> Siccome PHP inizializza le superglobal quando parte, non c'è modo di
> metterci qualcosa (se non modificandole direttamente e manualmente) in
> ambiente CLI: quando lo script viene eseguito sono già state
> inizializzate.
if (!isset($_COOKIE['abc'])) {
//manomissione...
$_COOKIE['abc'] = random();
}
però manomettere una variabile globale... è una pratica consigliabile?
[toc] | [prev] | [next] | [standalone]
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Date | 2017-01-11 15:27 +0000 |
| Message-ID | <edn173Fc9ulU1@mid.individual.net> |
| In reply to | #21351 |
On 11/01/2017 10:37, alex wrote:
> Il 09/01/2017 19:56, Alessandro Pellizzari ha scritto:
>> Siccome PHP inizializza le superglobal quando parte, non c'è modo di
>> metterci qualcosa (se non modificandole direttamente e manualmente) in
>> ambiente CLI: quando lo script viene eseguito sono già state
>> inizializzate.
>
> if (!isset($_COOKIE['abc'])) {
> //manomissione...
> $_COOKIE['abc'] = random();
> }
>
> però manomettere una variabile globale... è una pratica consigliabile?
No, non in codice normale come questo.
Ma se stai scrivendo un test che testi il caso specifico, può essere
tollerato. In pratica costruisci l'ambiente prima del test.
Ma proprio per questo, di solito, si wrappa l'accesso all'ambiente in
classi dedicate. A quel punto queste "porcherie" le farai solo nei test
delle classi wrapper, mentre in tutto il resto del codice semplicemente
usi la classe "Web" o quella "CLI", o fai un mock che presenti valori
deterministici ai fini del test.
Bye.
[toc] | [prev] | [standalone]
Back to top | Article view | it.comp.www.php
csiph-web