php

variabili e funzioni php per la comunicazione via http

Negli script PHP abbiamo a disposizione diverse variabili predefinite e istruzioni che ci permettono di comunicare su HTTP, qui sotto elenchiamo brevemente i più comuni.

GET & POST

Iniziamo dai meccanismi più facili: recuperare le informazioni fornite tramite HTTP (ad esempio tramite un form HTLML ma non solo).

$_GET
è un vettore che contiene le variabili passate tramite una richiesta get di http es: $_GET['nome']
$_POST
è un vettore che contiene le variabili passate tramite una richiesta post di http es: $_POST['password']

Poniamo per esempio che l'URL richiesta http://pluto.server.org/script.php?nome=Godzilla: lo scipt PHP potrà leggere il valore Godzilla nella variabile $_GET['nome'].

Body

Recuperre informaizoni dal body è decisamente semplice: $testo=file_get_contents('php://input'), nella variabile $testo troveremo tutto il contenuto del corpo del messaggio

Headers

Impostare un header HTTP è molto semplice ma bisogna tenere in mente che va fatto prima di generare il body.

L'istruzione da usare è header("Nome-Header: valore") che può ad esempio essere usata per impostare il tipo mime della risposta header('Content-Type: application/json') (il tipo mime di default è text/html) o qualsiasi altro header.

Un caso particolare dell'uso di header è quello per impostare lo stato della risposta: se si vuol fare questo la stringa deve iniziare con HTTP/ come ad esempio in header("HTTP/1.0 404 Not Found").

JSON

Anche PHP supporta JSON, possiamo ad esempio semplicemente trasformate un testo JSON nel corrispondente hash PHP: la funzione json_decode serve appunto a questo. Vediamo un esempio che la variabile $var contenga il seguente testo JSON:

$var='{"chi":{"nome":"mario","cognome":"rossi"},"altezza":180}';

Possiamo costruire l'hash corrispondente scrivendo:

$x = json_decode($var,true);

In questo caso il true finale dice di costruire un hash, in caso contrario json_decode costruirebbe un oggetto PHP.

Per avere il nome basta scrivere $x['chi']['nome']

Cookies

In PHP è possibile impostare i cookie utilizzando l'istruzione setcookie(nome, valore) e leggerli utilizzando la superglobal $_COOKIE, il seguente frammento di programma imposta un cookie chiamato pigreco e ne legge uno chiamato nomeUtente.

setcookie("pigreco", "3.14");

echo $_COOKIE['nomeUtente']."\n";

Attualmente (2021) i browser hanno incrementato il livello di sicurezza e per questo motivo impostando i cookie come sopra viene stampato un messaggio di attenzione nella console. Questo è dovuto al fatto che i cookie vengono utilizzati per profilare gli utenti, attualmente una impostazione più conforme alle specifiche è questa:

setcookie("t2", "116.28", [
    'expires' => time() + 86400,
    'samesite' => 'Lax',
]);

Come riportato su MDN, "samesite:Lax" fa si che il cookie venga inviato esclusivamente al sito che lo ha impostato ma che venga inviato anche quando da un sito esterno si segue un link verso il sito stesso. La parte "expires" serve invece ad impostare la scadenza del cookie.

Sessioni

Questo è un meccanismo che ci consente di mantenre uno stato tra una esecuzione e l'altra di uno script o tra diversi script dello stesso sito... il meccanismo usato è quello dei cookie ma li gestisce PHP e noi abbiamo a disposizone una superglobal per mantenere i valori tra una chiamata e l'altra.

session_start()
avvia una sessione o ne apre una già avviata, va usata all'inizio dello script/pagina prima di produrre output
$_SESSION
è un vettore che contiene dei dati che vengono mantenuti (per lo stesso utente) da una richiesta all'altra, va usata dopo session_start()