Tutorial introduttivo : PHP

Grazie al PHP e' possibile creare pagine web "dinamiche", considerate come normali pagine HTML e quindi con la possibilita' di essere create e  modificate proprio come si farebbe normalmente con le pagine in HTML.
 

Cosa e' necessario avere per usare php?

Questo breve tutorial suppone che si abbia gia' a disposizione uno spazio web su un server che supporti il PHP, che quest'ultimo sia attivo e che tutti files con estensione .php3 siano trattati da PHP. Questa estensione in genere e' standard sulla maggior parte dei server, se non ne siete sicuri basta chiedere all'amministratore del sistema. Accertate queste poche cose siete pronti a creare la vostra prima pagina php. Basta scrivere i propri file .php3 e scaricarli nella  vostra directory sul server web... il server automaticamente li elaborera' quando verranno richiesti dal browser. Non c'e' quindi nessun bisogno di ulteriori passaggi (compilazione, installazione plug-in etc..). Occorre entrare nell'ottica che le pagine .php3 non sono altro che comuni pagine HTML con altri tag aggiuntivi (interpretati appunto dal PHP sul server) che permettono di fare ogni sorta di operazione.
 

La prima pagina PHP .... il classico Hello World :)

Basta creare un file di nome hello.php3 e scriverci dentro questo:
 
<html><head><title>PHP Test</title></head> 
<body> 
<?php echo  "Hello World<P>"; ?> 
</body></html>
 
I colori hanno un puro scopo di aiuto per identificare meglio i tags PHP e le differenti sezioni di un'istruzione. Da notare inoltre che non ci troviamo di fronte ad uno script CGI, dato che questo listato non ha bisogno in alcun modo di essere eseguibile o altro di particolare. Come gia' detto ci troviamo di fronte ad un comune file HTML (notare i tag classici <html> e <body> all'inizio/fine della pagina), con l'aggiunta di tag "estranei" speciali.

In questo caso lo script e' molto semplice e serve solo da esempio, in quanto si poteva fare la stessa cosa tranquillamente senza il php utilizzando HTML.  Il risultato di questa pagina e':

Hello World

Se avete provato questo esempio e non ha funzionato, e' probabile che il server non ha il PHP abilitato. Per chiarimenti o per l'attivazione contattate l'amministratore.
 
 

Qualcosa di piu' utile... (finalmente!)

Passato l'obbligatorio esempio "Hello world" vediamo qualcosa di piu' "utile", ovvero una pagina che "controlli" quale browser si sta utilizzando. Per fare questo bisogna intercettare la stringa "user agent" che il browser manda al momento della richiesta al server http. Questa stringa e' memorizzata in una variabile (le variabili in PHP sono sempre contrassegnate dal simbolo del dollaro americano, $ ). La variabile che ci interessa e' $HTTP_USER_AGENT.
Per visualizzarne il contenuto basta questa istruzione (da aggiungere volendo nella pagina hello.php3 ):
 
<?php echo $HTTP_USER_AGENT; ?>
 
Ad esempio con il browser che state utilizzando ora per vedere questa pagina, il risultato e' questo:

Mozilla/4.61 [en] (X11; I; Linux 2.2.10 i686)

Ci sono molte altre utili variabili impostate dal server. Per averne una lista completa usate questa istruzione :
 
<?php phpinfo()?>
 
Al momento della visualizzazione della pagina .php3 con questa istruzione, il server restituira' al browser una pagina web con la lista di tutte le variabili disponibili (per un esempio andate alla fine di questo tutorial).

Fino ad ora abbiamo visto solamente istruzioni singole, ma e' possibile anche raccogliere piu' istruzioni PHP in piccoli "blocchi", cosi' da poter fare degli script piu' elaborati. Per esempio, rifacendoci all'esempio del controllo del tipo di browser, se volessimo controllare nello specifico se si sta usando Internet Explorer (e magari consigliare chi lo sta usando a cambiare :P) potremmo scrivere questo:

 
<?php  
if(strstr($HTTP_USER_AGENT, "MSIE")) { 
    echo  "You are using Internet Explorer (Micro$oft thanks you!) <br>"; 
} 
?>
 
A questo punto pero' e' necessario introdurre un po' di nuovi concetti. Innanzitutto abbiamo l'istruzione " if ". Se avete un po' di pratica con la sintassi di C questo listato risultera' comprensibile. Se non avete familiarita' col C (o altri linguaggi con sintassi simile a questa), la cosa migliore sarebbe leggere i primi capitoli di un semplice manuale introduttivo al C. Tutti i problemi di operazioni su stringhe e memoria che si possono avere in C sono stati esclusi dal PHP, ma la sintassi di base rimane comunque la stessa.

Il secondo concetto che occorre introdurre e' la funzione strstr(), una funzione interna del PHP che cerca in una determinata stringa (nel nostro caso quella memorizzata nella variabile $HTTP_USER_AGENT) un' altra stringa
(o piu' semplicemente una parola e/o frase in questo caso, ovvero MSIE). Se la stringa viene trovata la funzione restituisce il valore "true" (vero), altrimenti restituisce "false" (falso). Se la ricerca va a buon fine (quindi la funzione resituisce "true") vengono eseguite le istruzioni subito successive.

Volendo, a questo punto potremmo "ampliare" l'esempio di prima, per mostrare la flessibilita' del PHP vedendo con quale facilita' e' possibile passare dalla modalita' PHP (istruzioni PHP ) a quella normale (html semplice) e viceversa all'interno di uno stesso blocco di istruzioni PHP (regolato in questo caso dall' " if " e aperto dal primo tag <?php):

 
<?php  
if(strstr($HTTP_USER_AGENT, "MSIE")) { 
?> 
<center><b>You are using Internet Explorer</b></center> 
<? 
} else { 
?> 
<center><b>You are not using Internet Explorer</b></center> 
<? 
} 
?>
 
Invece di usare l'istruzione echo per generare l'output dello script, siamo "usciti" dalla modalita'  PHP inserendo solo puro e semplice codice HTML. Tutto questo per dimostrare una caratteristica importantissima: il flusso dello script e' rimasto intatto. Solo uno dei due blocchi HTML viene eseguito (a seconda del risultato dell'istruzione if ). Il risultato a video di questo script, con il browser che state utilizzando, ora e' il seguente:

You are not using Internet Explorer


Lavorare con i Form

Una delle caratteristiche piu' potenti ed importanti del PHP e' il modo in cui interagisce con i componenti di un form. Il concetto di base e' che ogni elemento di un form risulta in PHP automaticamente in una variabile con lo stesso nome che e' stato assegnato all'elemento nella pagina. Se tutto cio' puo' suonare confuso, ecco un semplice esempio.
Assumiamo di avere una semplice pagina HTML con un form come questo:
 
<form action="action.php3" method="POST"> 
Your name: <input type=text name=name> 
You age: <input type=text name=age> 
<input type=submit> 
</form>
 
In questo form non c'e' nulla di particolare. E' un semplicissimo form HTML senza speciali tag, in cui l'utente scrive nelle due caselle di input il suo nome e l'eta', per poi inviare i dati. Premuto il bottone submit viene chiamata la pagina
action.php3, in cui potreste mettere un'istruzione come questa:
 
Hi  <?php echo $name?>.  You are  <?php echo $age?> years old.
 
A questo punto dovrebbe essere ovvio il funzionamento ed il risultato di questo esempio. Non c'e' nulla da aggiungere. Infatti e' da notare in particolare come il contenuto dei campi input "name" e "age" viene assegnato dal PHP automaticamente alle variabili omonime $name ed $age (che poi vengono come al solito visualizzate da echo), senza bisogno di nessun altra istruzione.
 

More? (aggiunte ed altri esempi)

Purtroppo e' molto tempo che sul sito del PHP promettono di espandere questo utile e semplice tutorial .... ma visto che a tutt'oggi ancora non si e' visto nulla, ho deciso di ampliarlo personalmente pian piano con aggiunte/esempi, sperando che possano essere anche utili e "concreti" (volendo pronti per essere implementati sulle vostre homepage). Inoltre cerchero' di integrare il tutto con alcuni "estratti" dal manualone ufficiale (downloadabile dal sito del php sia in fomtato stampabile che consultabile direttamente dal browser).

Inanzitutto comincerei da uno dei primi esempi proposti dal tutorial, ovvero l'individuazione del browser e le variabili del server. Per maggior chiarezza suggerirei di provare ad aggiungere questo alla prima pagina hello.php3
 

 <?php phpinfo()?>

e leggerne l'output risultante (chiaramente dopo averla rimessa sul server .... dall'hard disk probabilmente non vedreste nulla), per farvi un'idea di cosa/quali/quante siano le variabili di server disponibili, in quanto alcune saranno utilizzate nel prossimo esempio. Con questo listato potete visualizzare su una pagina alcune caratteristiche utili circa il server ed il client in uso, grazie appunto ad alcune variabili http:
 

<font size=+3> Dati server : </font>
<br>
<br>
<br>
<b>Amministratore : </b> <?php echo $SERVER_ADMIN; ?>
<br><b>Sistema : </b> <?php echo $MACHTYPE; ?>
<br><b>Software : </b> <?php echo $SERVER_SOFTWARE; ?>
<br><b>Host : </b> <?php echo $HOSTNAME; ?>
<br><b>Server : </b> <?php echo $HTTP_HOST; ?>
<br><b>Porta : </b> <?php echo $SERVER_PORT; ?>
<br><b>Protocollo : </b> <?php echo $SERVER_PROTOCOL; ?>
<br>
<br>
<font size=+3> Dati client : </font>
<br><b>Indirizzo IP : </b> <?php echo $REMOTE_ADDR; ?>
<br><b>Host : </b> <?php echo $REMOTE_HOST; ?>
<br><b>Sistema : </b> <?php echo $HTTP_USER_AGENT; ?>
<br><b>Porta : </b> <?php echo $REMOTE_PORT; ?>
<br>
<br>
<br>

Come poteve vedere lo script e' molto semplice .... e' uguale a quello d'esempio nel tutorial, solo che "abbellito" con altri dati interessanti ottenuti dalle variabili del server. Per il risultato di tutto questo (che non ho volutamente inserito in questa pagina) provate ad inserirlo in una vostra pagina html e vedere il risultato .... sicuramente potra' essere d'effetto sulla vostra home.... inoltre e' un modo come un altro per invitarvi a "studiarlo" senza limitarvi all'inutile copia/incolla.   ;)
 
 

Contatore d'accessi:

Ed ora eccoci alla parte che tutti gli aspiranti coder aspettano .... il famoso contatore d'accessi! Certo 'e facile trovarne gia' belli e pronti in giro per la rete, con tanto di bella grafica e statistiche di ogni tipo ... ma volete mettere la soddisfazione di farsene uno da soli ? ;) Ci sono diversi modi di scrivere un contatore... e secondo me uno dei piu' facili (non il piu' efficiente forse) e' quello di utilizzare un semplice file di testo, in cui ogni volta leggere il vecchio valore, aumentarlo di 1 e riscriverci dentro, per poi rileggere il valore nuovo (aumentato quindi di 1) etc.. Anche se a prima vista il listato potra' sembrare "impossibile" non preoccupatevi ... e' piu' facile di quanto possa sembrare...
 
 

<br><b>Accessi totali ottenuti da questa pagina </b> :
      <?php
 
            $contatore = "/mia/dir/su/server/web/mio_file.txt";

                   function conta($contatore) {
                        $aprif = fopen($contatore,"r+");
                        $hits = fgets($aprif, 16);
                        $hits += 1;
                        print("$hits \n");
                        rewind($aprif);
                        fputs($aprif,$hits);
                        fputs($aprif,"\n");
                        fclose($aprif);
                        }
            conta($contatore);
?>
 

Dato che gia' e' stato spiegato prima, si presuppone che almeno un minimo base di conoscenza informatica ci sia .... in ogni caso cerchero' di essere il piu' chiaro e semplice possibile. Innanzitutto avrete notato che tutto il listato "critico" php e' all'intenro di un blocco delimitato da function { e }. Senza dilungarsi troppo, diciamo subito che una funzione non e' altro che un blocco di istruzioni che puo' essere eseguito ogni qualvolta si vuole, quindi se io voglio eseguire tutta questa serie non la riscrivero' tutta di nuovo ma bastera' chiamare la funzione e magicamente tutto il listato racchiuso nella funzione verra' eseguito. In questo caso l'istruzione di creazione della funzione e'

function conta($contatore) {

ovvero definisco il nome della funzione ("conta" in questo caso) e poi passo un parametro esterno (non e' una cosa obbligatoria ..... se lo avessi strutturato diversamente avrei potuto scrivere function conta()  ). Il parametro che passiamo alla funzione in questo caso e' la prima istruzione in php dopo il tag <?php di apertura dei comandi php. La prima istruzione  $contatore = "/mia/dir/su/server/web/mio_file.txt"; non fa altro che assegnare alla variabile $contatore il nome (completo di percorso di ricerca per sicurezza) del file che useremo per memorizzare il numero attuale di accessi; tutto cio' ci sara' comodo quando, dovendo fare riferimento ancora a quel file, invece di riscrivere tutto il path/nomefile scriveremo solamente $contatore. L'istruzione successiva e'

 $aprif = fopen($contatore,"+r");

che "apre" il file $contatore con il comando fopen(nomefile, modalita'); (sarebbe piu' preciso parlare di puntatori, ma per ora tralasciamo.... magari prima o poi vi parlero' anche di quelli) in modalita' +r (ovvero lettura/scrittua... il che vuol dire che avremo anche potuto aprirlo ad esempio in modo sola-lettura "r", o sola scrittura "w" e non finisce qua ... per ora accontentiamoci :D). Da notare anche che tutto il risultato (cioe' il file aperto) e' assegnato alla variaible $aprif (analogamente a quanto fatto per la var $contatore). Una volta aperto il file bisogna naturalmente leggerlo (in questo caso dovrete la prima volta creare un semplice file di testo e scriverci il numero di partenza del contatore...e non barate!). Ora per leggerlo correttamente, dato che abbiamo creato un file di una sola riga e con un numero e basta ma potrebbe non essere sempre cosi' semplice, bisognera' dire allo script di andare a leggere *proprio li'* (anche se gia' lo abbiamo fatto con la modalita' +r che apre il file "puntando" all'inizio, cioe' proprio quello che serve a noi). Dunque eccoci arrivati al momento di "leggere" il valore contenuto nel nostro file

 $hits = fgets($aprif, 16);

Oramai dovrebbe essere abbastanza intuitivo.. con fgests(puntatore-file, "lunghezza"); non faccio altro che leggere la riga dove si trova il nostro puntatore (nel nostro caso all'inizio del file con la modalita' +r), puntatore che prima abbiamo assegnato alla variabile $aprif. Il tutto come sempre viene assegnato ad una variabile. Il parametro che io ho chiamato "lunghezza" non fa altro che dire fino a dove leggere... infatti fgets leggera' n-lunghezza bytes e li' si fermera', a meno che prima non incontri un carattere \n (newline) o un EndOfFile (spero siano intuitivi i significati di queste cose). Ora il grosso e' stato fatto .... con le istruzioni    $hits += 1;     print("$hits \n");      rewind($aprif);     non facciamo altro che incrementare di 1 il valore letto dal file (ed assegnato prima ad $hits) , poi lo stampiamo a video e "riavvolgiamo" il puntatore (che sara' andato a capo dato che abbiamo dato anche il carattere \n newline) facendolo tornare all'inizio del file (con rewind, come nelle videocassette), per poter scrivere il nuovo valore su quello vecchio con   fputs($aprif,"\n") (la sintassi sarebbe fputs(puntatore-file, stringa da scrivere, "lunghezza"); , ovvero noi scriviamo nel nostro file aperto ed assegnato ad $aprif il nuovo valore di $hits tralasciando volutamente il parametro "lunghezza", analogo a quello di fgets, senza il quale fputs scrive l'intera stringa (linea)). A questo punto non ci resta che "chiudere" il nostro file-puntatore con  fclose($aprif); , chiudere il blocco di istruzioni della funzione con } ed infine far si' che la nostra funzione.......funzioni! ( "chiamandola" con conta($contatore); ... notare il ; alla fine di ogni istruzione e la chiamata alla funzione con la nostra variabile $contatore, che essendo stata volutamente dichiarata fuori della funzione deve essere passata a quest'ultima). Il vostro contatore e' pronto per entrare in funzione!

Bene .... per ora e' tutto ... spero di esservi stato in qualche modo di aiuto e di non avervi confuso troppo le idee... prevedo di aggiungere nuove cose (php e non) a questo spazio.... per consigli e/o errori/imprecisioni scrivere a  info@bluecodes.com
 

Traduzione italiana, aggiunte, modifiche (c) 1999 by rofus
 

Ultimo aggiornamento: 15/1/1999