Guida di PHP (base), Il primo programma

In questo capitolo vedremo come creare ed eseguire qualche semplice script PHP, per prendere confidenza con l'ambiente in cui lavoreremo nel corso della guida

Esecuzione di uno script PHP

PHP è un linguaggio un po' anomalo rispetto agli altri che siamo abituati a utilizzare (C, Java, Python, etc.). Infatti, quando programmiamo, ad esempio, in C siamo abituati a creare un file sorgente che contiene il nostro codice, compilare il codice, ed eseguire il programma risultante. Addirittura in Python spesso è sufficiente un doppio clic sul sul file sorgente. Tuttavia, nonostante siamo abituati ad eseguire script PHP tutti i giorni (basta aprire Wikipedia, Facebook, o questa stessa pagina: sono tutte realizzate in PHP), non è chiaro come vengano eseguiti questi script.

La prima particolarità che osserviamo nei programmi PHP è che di solito sono visualizzati nel browser, come tutti gli altri siti internet. Uno potrebbe pensare, quindi, che per visualizzare una pagina PHP sia sufficiente creare la pagina, e poi aprirla con un browser qualsiasi, tipo Firefox o Chrome.

Le cose però non stanno esattamente così. Per capire come vengono eseguiti i programmi PHP è dobbiamo andare a guardare un po' più da vicino quello che succede quando apriamo una pagina PHP su Internet:

  1. L'utente digita l'indirizzo della pagina (nell'esempio http://www.repni.it/) nel browser.
  2. La richiesta partita dal computer dell'utente raggiunge la macchina server che ospita il sito.
  3. Il server (www.repni.it) da qualche parte ha la pagina PHP che l'utente ha chiesto (index.php).
  4. Il server esegue il codice PHP contenuto nella pagina.
  5. Il codice di index.php, eseguito dal server, produce del normale codice HTML.
  6. Questa pagina HTML creata "al volo" viene mandata al computer dell'utente, e visualizzata nel browser come qualsiasi altra pagina HTML.

Possiamo vedere, quindi, che tutto il lavoro per eseguire lo script viene fatto dal server: Firefox non andrà mai a toccare il codice PHP, ma si limiterà a visualizzare l'HTML che gli viene inviato. Infatti il codice PHP che produce la pagina, il vero e proprio file index.php, non viene neanche scaricato sul PC dell'utente, ma può essere letto solo dal server.

Preparare l'ambiente

In effetti questo potrebbe sembrare un problema, visto che non tutti di solito hanno spazio per mettere in soggiorno un server web grande come un armadio su cui provare le proprie pagine PHP.

La buona notizia però è che un server web non deve per forza essere grande come un armadio, anzi, possiamo usare come server il nostro computer ed eseguire le nostre pagine, come si dice, in locale.

Per fare questo dobbiamo installare un po' di software: Apache (il programma vero e proprio che riceve le richieste dal browser, esegue gli script PHP, e restituisce il codice HTML) e PHP (il "motore" che sarà usato da Apache per eseguire gli script). L'installazione di questi strumenti di solito è un po' macchinosa, ma per fortuna esistono dei "pacchetti" già pronti e molto semplici da installare:

  • Linux - Gli utenti Linux non amano pacchetti già pronti: qui su RePNI abbiamo un articolo che spiega come configurare la propria Linux-box da zero.
  • Windows - EasyPHP è uno dei pacchetti più usati in ambiente Windows. WampServer può essere una valida alternativa.
  • Mac OSX - Gli utenti Mac possono provare Mamp; non l'abbiamo testato, ma dovrebbe funzionare in modo simile ai suoi equivalenti per Windows.

Installato (ed eseguito) tutto il software necessario possiamo provare a vedere come se la cava il nostro PC nei panni di webserver. Per fare questo apriamo Firefox (o qualsiasi altro browser) e digitiamo questo indirizzo:

http://localhost/

Se tutto è configurato correttamente, apparirà la pagina predefinita del server. Molto spesso si tratta di una semplice pagina bianca con la scritta "It works!" ma, a seconda dell'ambiente il contenuto può essere leggermente diverso. Questo ad esempio è il risultato dell'installazione di Apache su Linux Fedora:

La pagina predefinita di Apache su Linux Fedora

In ogni caso, il fatto che riceviamo una risposta significa che l'installazione ha funzionato, e la nostra macchina è pronta per ospitare gli script PHP che andremo a creare.

È importante sapere che tutti i file PHP che creiamo vanno messi in una cartella specifica, quella in cui Apache va a cercare le pagine da servire. Questa cartella è diversa a seconda del sistema operativo e del pacchetto che abbiamo installato:

  • Linux - Tipicamente /var/www/html/, o /srv/http/
  • Windows - Nel caso di EasyPHP la cartella che ci interessa si chiama www\, e si trova nella cartella principale del programma (es. C:\Program Files\EasyPHP-5.3.9\www\); WampServer invece di default ospita i suoi files in C:\wamp\www\.
  • Mac OSX - La cartella predefinita per Mamp invece è /Applications/MAMP/htdocs/.

Una volta individuata la cartella, possiamo creare al suo interno un file prova.php e scriverci dentro qualcosa (anche del semplice HTML). Possiamo visualizzare questo file nel browser visitando http://localhost/prova.php. Se tutto funziona correttamente, siamo pronti per iniziare a programmare in PHP.

La prima pagina PHP

Ora inizia la parte di programmazione vera e propria: iniziamo a creare una prima, semplice, pagina PHP.

Per farlo basterà copiare questo codice in un file, che chiameremo, ad esempio, hello.php:

<html>
<head>
<title>La mia prima pagina PHP!</title>

<body>
<?php
	echo "Hello, world!";
?>
</body>
</html>

Per eseguire il codice basterà copiare il nostro hello.php nella directory del webserver (che abbiamo trovato nella sezione precedente, "Preparare l'ambiente"), e aprire nel browser la pagina http://localhost/hello.php.

È facile riconoscere nel codice la classica struttura di una pagina HTML. Infatti, a parte le righe 6, 7 e 8, la pagina verrà servita così com'è da Apache.

Le righe 6, 7 e 8, invece, verranno "passate" all'interprete PHP, che eseguirà il codice in esse contenuto. Il concetto di base è semplice: tutto quello che si trova all'interno dei blocchi <?php ... ?> viene eseguito come PHP, il resto rimane così com'è.

Concentriamoci sul codice che abbiamo scritto, che poi è una sola istruzione:

echo "Hello, world!";

Il funzionamento dell'istruzione echo è piuttosto banale: tutto quello che si trova tra le virgolette viene scritto nella pagina HTML che sarà servita (attenzione a non dimenticare il punto e virgola che, come in molti altri linguaggi, deve trovarsi alla fine di ogni istruzione). Possiamo verificarlo guardando il risultato:

La pagina che abbiamo creato, visualizzata nel browser

Oltre l'HTML: stampare data e ora

Lo script che abbiamo scritto nel paragrafo precedente non è particolarmente entusiasmante: non c'era certo bisogno di PHP per creare una pagina HTML contenente soltanto "Hello, world!".

Ora proveremo a fare qualcosa che con il semplice HTML non potremmo fare: stampare a schermo la data e l'ora, al momento in cui la pagina viene visitata. Lo faremo usando la funzione date()

<html>
<head>
<title>Data e ora</title>

<body>
<?php
	date_default_timezone_set('Europe/Rome');

	echo "Ciao, oggi è il ";
	echo date("d-m-Y");
	echo " e sono le ore ";
	echo date("G:i");
?>
</body>
</html>

Questo codice produrrà il seguente testo (variando la data e l'ora a seconda di quando la pagina viene visualizzata, ovviamente):

Ciao, oggi è il 14-06-2012 e sono le ore 18:59

Notiamo subito, infatti, che due delle quattro echo (alle righe 10 e 12) non contengono una semplice stringa di testo (ricordiamo che in informatica i "pezzi" di testo semplice si chiamano stringhe), ma piuttosto una chiamata alla funzione date(). Alla riga 7 c'è anche una chiamata ad un'altra funzione, ma di questa non ci occupiamo: serve solo a specificare il nostro fuso orario, in modo da poter usare date().

Per capire come si usa date() diamo un'occhiata al manuale (http://php.net/manual/en/function.date.php):

Descrizione della funzione date nel manuale di PHP.

È importante saper usare il manuale perchè, come abbiamo detto nel capitolo precedente, ci sono più di 2000 funzioni predefinite in PHP: è impensabile impararle tutte a memoria. Vediamo come è composta la descrizione del manuale di date():

  • string date - Intuitivamente, date non è nient'altro che il nome della funzione. Prima del nome della funzione però troviamo scritto string; questo indica il tipo di dato restituito dalla funzione. Significa grossomodo che il compito di date è produrre una stringa di testo (la data corrente, appunto) e metterla nel punto in cui la funzione è stata chiamata. Ad esempio, guardiamo la riga 10 del codice (echo date("d-m-Y");): come sappiamo, echo si aspetta di trovare del testo da stampare, ma invece in questo caso trova la chiamata a date; date viene quindi eseguita e la sua chiamata produce la stringa di testo "14-06-2012" come risultato; il risultato "piace" ad echo, che si aspettava prorpio una stringa di testo qualsiasi, e quindi la chiamata va a buon fine, come se il codice fosse stato echo "14-06-2012";.

  • (string $format - Questo ci dice che, per funzionare, date() ha bisogno di un parametro di nome $format, che dev'essere di tipo string. In effetti se guardiamo le due chiamate a date() che abbiamo nel codice (linea 10: echo date("d-m-Y"); e linea 12: echo date("G:i");), dentro le parentesi tonde di date() c'è proprio una stringa di testo (nel primo caso "d-m-Y", "G:i" nel secondo). Come spiegato nella descrizione in inglese, questo parametro sarà serve alla funzione per sapere come stampare la data. Ad esempio la prima chiamata ("d-m-Y") produrrà il giorno del mese su due cifre (d, che sta per day), un trattino (-), il mese dell'anno su due cifre (m, che sta per month), un trattino (-) e l'anno su quattro cifre (Y maiuscola, che sta per year). La spiegazione completa di tutte le lettere che è possibile inserire si trova sul manuale: potrebbe essere una buona idea sperimentarle un po'!

  • [, int $timestamp = time()]) - Questa è la parte che, per il momento, ci interessa di meno: tutto quello che si trova tra parentesi quadre è un argomento opzionale, sicnifica che possiamo anche evitare di specificarlo quando chiamiamo la funzione (e infatti nel nostro codice non l'abbiamo specificato). La descrizione in inglese ci dice che questo argomento, un numero intero (int) di nome $timestamp può essere usato per specificare una data qualsiasi da stampare; quando $timestamp non è specificato, date() userà la data corrente, che è esattamente quello che succede nel nostro esempio.

Direi che abbiamo detto tutto quello che serve; facciamo solo un piccolo test per vedere se abbiamo capito quello che abbiamo fatto: chi sa dire cosa succede se scrivo questo codice?

	date("d-m-Y");

Niente, sullo schermo non verrà stampato proprio nulla. Questo perchè, anche se date() produrrà effettivamente una stringa con la data, questa stringa non sarà usata da nessuno: manca echo davanti a date(), quindi la data prodotta non sarà mai stampata. Attenzione a questo tipo di errori, sono molto più frequenti di quanto non si direbbe!

Siamo arrivati alla fine di questo primo capitolo "pratico": lascio la parola a Gian, per il prossimo capitolo sulle variabili. A presto!

In breve

In questo capitolo abbiamo visto che...

  • Gli script PHP non sono eseguiti dal browser, ma da un server web, che invia il risultato al browser sotto forma di pagina HTML pronta da visualizzare.
  • Possiamo trasformare il nostro computer in un webserver installando il software giusto. Tipicamente avremo bisogno di Apache e PHP.
    • Gli utenti Linux possono seguire la nostra guida per configurare il webserver.
    • Gli utenti Windows possono installare pacchetti già pronti, come EasyPHP o WampServer.
    • Gli utenti Mac OSX possono installare Mamp, simile ai pacchetti per windows.
  • Apache, il software che gestisce il server web, creerà una cartella apposta in cui andremo a mettere le pagine che creiamo. Queste pagine saranno visualizzabili in un qualsiasi browser, all'indirizzo http://localhost/pagina.php/.
  • Una pagina PHP è una normale pagina HTML, in cui però si trovano dei blocchi di codice, delimitati da <?php ... ?>.
    • Tutto il codice in questi blocchi sarà eseguito come codice PHP.
  • Possiamo scrivere del testo (es. Hello, world!) nella pagina con l'istruzione echo (es. echo "Hello, world!";).
    • Occhio a non dimenticare il punto e virgola al termine di ogni istruzione!
  • Possiamo chiamare delle funzioni che fanno del lavoro per noi. Ad esempio, la funzione date() ritorna la data di oggi, che possiamo stampare con echo (es. echo date("d-m-Y");)
  • PHP ha un utile manuale che descrive tutte le sue funzioni di base, e come si usano: vale la pena di abituarsi a cercare informazioni nel manuale, visto che PHP conta più di 2000 funzioni predefinite che potrebbero esserci utili in qualsiasi momento, e che sarebbe difficile imparare a memoria!