Il linguaggio di programmazione PHP
 

cookie in ambiente CLI

alex 9 Gen 2017 17:30
<?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?
fmassei@gmail.com 9 Gen 2017 17:54
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!
Alessandro Pellizzari 9 Gen 2017 19:56
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.
alex 11 Gen 2017 11:37
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?
Alessandro Pellizzari 11 Gen 2017 16:27
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 "*****herie" 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.

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.