giovedì 12 aprile 2012

Introduzione al PHP: Come funziona il PHP in una pagina Web

Prima di tutto chiariamo cosa è PHP:
PHP (acronimo ricorsivo che sta per PHP: Hypertext Preprocessor) è un linguaggio di scripting open source per scopi generici, ampiamente diffuso e particolarmente adatto alla produzione di software web incorporandolo nel codice HTML.
La richiesta del Client
Se stai seguendo i miei post dai meno recenti in poi (come un libro) hai di certo creato il tuo primo progetto NetBeans denominato LocalHelloWorld. Iniziamo col chiarire come funziona una richiesta di un client (un browser web) per una pagina web del tipo http://localhost/LocalHelloWorld/index.php.
  1. Il client (browser web) lancia la sua richiesta al server (computer) sulla porta 80 (protocollo HTTP) per avere accesso al file index.php presente nella cartella LocalHelloWorld del server.
  2. La richiesta è intercettata dal Web Server Apache, in ascolto sulla porta 80, che rendendosi conto che è richiesto un file sorgente PHP, trasferisce tale richiesta al motore di scripting PHP per l'elaborazione.
  3. Il motore di scripting PHP accede al filesystem del computer e letto il file sorgente richiesto (index.php) ne esegue il contenuto.
  4. Da questo momento e fino al termine dell'esecuzione del contenuto del file index.php, a seconda delle istruzioni contenute ed eseguite, PHP ha accesso a risorse quali il filesystem del server, Basi Dati come MySQL, risorse di rete, ecc.. Durante tale esecuzione PHP produce dell'output (tipicamente codice HTML) che è restituito ad Apache.
  5. Apache, ottenuto l'output da motore di scripting PHP, provvede a inviarlo al client.
Tutto questo significa che il client non riceve una pagina statica, ovvero quella presente sul server così com'è, ma una pagina generata dinamicamente dal motore  di scripting PHP come conseguenza dell'esecuzione dello script contenuto nel sorgente richiesto.

Ridiamo un'occhiatina veloce al primo progetto LocalHelloWorld.
Il progetto LocalHelloWorld nell'IDE NetBeans
Il file sorgente php, denominato index.php, si presenta come un comune file HTML, ma al suo interno ci sono tre righe particolari:

<?php
echo "Hello World";
?>

I simboli <?php e ?> servono ad indicare l'inizio e la fine di un'area in cui è incorporato del codice scritto nel linguaggio PHP. Diciamo che con <?php si entra in modo PHP, mentre con ?> si tona in modo HTML. Il sorgente è per default interpretato in modo HTML.

Il motore di scripting PHP esegue tutte le righe all'interno del file sorgente avendo cura, fin tanto che si trova in modo HTML, di trasferire in output le righe (inviarle ad apache) così come sono ed elaborare secondo le regole del linguaggio PHP le righe incorporate in modo PHP. Qualora le righe in modo PHP producano dell'output, questo è inviato ad Apache perché lo invii al client proprio come accade nel modo HTML.

Analizzando il nostro piccolo esempio, abbiamo che
  1. dal doctype fino al tag <body> (da riga 1 fino a 7), ci si trova in modo HTML, quindi questo pezzo dello script è inviato così com'è ad apache e conseguentemente al client
  2. poi si entra in modo PHP (riga 8), quindi il motore di scripting esegue secondo le regole del linguaggio PHP il contenuto. Contenuto che consiste di una sola istruzione echo. L'istruzione echo consente di produrre dell'output, ed in particolare questa echo produce la scritta racchiusa tra le doppie virgolette Hello World (riga 9). 
  3. Si torna quindi in modo HTML (riga 10)
  4. il restante codice HTML è prodotto in output
Possiamo quindi affermare che l'output prodotto, ed inviato al browser web, in seguito all'esecuzione dello script è

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Hello World</title>
    </head>
    <body>
Hello World    </body>
</html>

Si noti che il tag di chiusura del body è sulla stessa riga della scritta HelloWorld. Ciò perché in modo PHP è stata solo prodotta la riga Hello World senza un accapo. Ne consegue che il successivo output in modo HTML è continuato lì dove si è concluso l'output in modo PHP.
Il browser interpreta la pagina prodotta visualizzando come risultato quanto mostrato nella seguente immagine.
L'output ritornato dal Browser dopo l'esecuzione
dello script PHP index.php