Php

Che cosa e' il PHP?

Il PHP e' stato pensato per rendere le pagine html (quelle del web, per intenderci) interattive, cioe' dare la possibilita' alla stessa pagina di apparire diversa a seconda delle richieste o esigenze di chi le legge. Per apparire intendo non solo la possibilita' di cambiare colore o caratteri, ma anche di far apparire contenuti (paragrafi, testi) diversi a seconda dell'input dell'utente.

Con queste intenzioni, il PHP e' diventato e puo' essere associato ad un vero e proprio linguaggio di programmazione, dove invece di un compilatore che crei l'eseguibile, basta un server che elabori le pagine richieste. Chiaramente il server piu' utilizzato e' Apache (linux regna incontrastato!).

Installazione

In tutte le distribuzioni Linux, il php e' gia' attivato, comunque se si volesse qualche opzione in piu', sarebbe necessario reinstallarlo. Per fare cio', prima di tutto fate piazza pulita di tutto cio' che e' installato gia' di php:

 locate php | grep /usr

e cancellate tutto quello che esce fuori (a parte quello dentro le cartelle di apache)

Per installare il php, basta aver installato apache, decommentare le righe che riguardano il php in http.conf.

A questo punto vi scaricate il sorgente da http://www.php.net , e digitate innanzitutto:

 make clean

(ultimamente il codice sorgente e' un po' sporco).

poi, tutto in una riga (aggiustate i percorsi di apache e mysql oppurtunatamente):

 ./configure --with-apxs2=/usr/local/apache2/bin/apxs   
  --with-zlib  --with-bz2  --enable-calendar  --enable-exif 
  --with-gd  --with-gettext  --with-mysql=/usr/local/mysql

poi

 make
 su
 make install

Finito!

Come e' fatta una pagina php rispetto ad una normale?

Il codice php deve essere scritto si su una pagina a se', che deve essere nominata nominata con l'estensione .php, in realta' nella pagina si scrivera' il codice HTML con delle aggiunte di php. L'importante e' che il codice sia scritto all'interno di due particolati tag, cioe' tra due sequenze di caratteri, grazie alle quali il server riconosce che c'e' all'interno del codice php. Il codice puo' essere scritto tutto su una riga o su piu' righe, come in HTML e' del tutto indifferente (io lo scrivero' su piu' righe per una migliore leggibilita').

I tag fra cui va racchiuso il codice sono:

  • <?php
  • ?>

Ecco alcuni esempi:

 <?php echo "W il PHP!!!"; ?>

Fara' apparire la scritta: W il PHP!!!

 <?php echo "<b> W il PHP!!!</b>"; ?>

Fara' apparire la scritta: W il PHP!!!

Questo perche' il file HTML letto dal browser avra' la frase tra i tag <nowiki><b></nowiki> che in HTML significa di far apparire in grassetto la frase tra i tag.

Per esempio questo potrebbe essere un file html:

 <html>
  <head>
   <title>Mi piace il PHP</title>
  </head>
  <body>
  <?php echo "<b>W il PHP!!!</b>"; ?>
  </body>
 </html>

Anche in questo caso verra' scritto in grassetto (bold): W il PHP!!!

Commentare

In PHP si puo' commentare come in C++, quindi se conoscete come si scrivono i commentin in C++ saltate di leggere questo paragrafo e andate direttamente al prossimo.

Per commento si intende quella parte del codice che non verra' letta mai dai computer, ma serve a voi o a chi verra' dopo di voi a lavorare sul codice, per capire cosa fa una parte del codice senza doverla leggere e sbattirci la testa per un'ora. A titolo informativo c'e' da sapere che ogni anno si fa a gara a chi scrive il codice piu' offuscato, cioe' piu' incomprensibile (e allo stesso tempo divertente), dove la prima regola e' chiaramente non commentare mai il codice, cosi' anche per capire due righe di codice bisogna ragionarci una settimana...

Per commentare il codice si deve racchiudere il commento tra due sequenze standard:

 /*
 */

Per esempio:

 /*Questo e' un commento*/
 /********************************************
 *Questo e' un commento piu' bello da vedere*
 *ma identico al precedente                 *
 ********************************************/

Esistono altri modi per commentare ma io li sconsiglio perche' sono meno pratici.

Comunque ecco altri commenti che commentano dal simbolo fino alla fine della riga:

 //Commento

 #Commento

Variabili

Una variabile e' uno spazio dove viene immagazzinato un dato, per poi utilizzarlo successivamente. Per definire una variabile basta anteporre il simbolo del dollaro, esempio:

 <?php $nome = "Paolo";
 $Nome = "Giovanni";
 echo $nome $Nome;
 ?>

Come vedete le variabili sono case sensitive, cioe' le variabili sono differenti a seconda se sono scritte con caratteri maiuscoli o minuscoli.

Con il PHP4 e' stata introdotta una novita', la possibilita' di assegnare le variabili per referenza; cio' vuol dire che si possono assegnare piu' variabili allo stesso valore e se una cambia, cambiano tutte le altre. Questa novita' puo sembrare inutile a chi scrive un programma tutto da solo, ma in grandi progetti, dove ognuno scrive una parte del programma, cio' permette incastrare i vari pezzi senza difficolta'. Per assegnare una variabile per riferimento basta usare il carattere &. Esempio:

 <?php $conto = 1000 ;
 $estratto_conto = &$conto ; /*abbiamo assegnato una 
 variabile per riferimento*/
 $conto = $conto - 300 ;
 echo $estratto_conto;
 ?>

Il programma scrivera' sullo schermo 700.

Tipi di dati

Booleani

Il tipo booleano (da George Boole, ideatore di un tipo di matematica), puo' assumere solo due valori o VERO (True) o FALSO (False). Come nel C++ ogni valore diverso da 0 e' considerato come il valore VERO: cioe' se invece di assegnare ad una variabile booleana il valore vero, assegnamo un valore diverso da zero, il server lo trasformera' in VERO. Viceversa qualunque assegnamento del valore 0 (o 0.0 o avete capito...) viene trasformato nel valore FALSO (False). Esempio:

 <?php 
 $variabile1 = True ;
 $variablie2 = 5 ;
 $variabile3 = -3 ;
 $variabile4 = 0 ;
 $variabile6 = 0.00 ;
 $variabile7 = "0" ;
 $variabile8 = False;
 $variabile9 = false;
 /*Le varibili 1-3 hanno valore VERO, tutte le altre FALSO* ?>

Interi

 Gli interi sono i numeri senza virgola. Possono essere espressi in forma decimale (la forma usata degli iesseri umani), ottale, esadecimale. Questo tipo si usa 

Esempio:

 <?php
 $var1 = 12; 
 $var2 = 014;
 $var3 = 0xC;
 /*abbiamo assegnato a tutte le variabili il valore dodici*/
 ?>

Reali

Per reali intendo tutti i numeri, che non debbano essere ristretti al campo precedente. Per i decimali si usa il punto, si puo' usare la lettera e per indicare

` 2e5=2*10^5 `

` 2e5=2*10^5 `

come per le calcolatrici. Esempio:

 <?php 
 $var1 = 1300. ;
 $var2 = 1.3e3 ;
 $var3 = 1.3E3 ;
 ?>

Stringhe

La stringa e' un tipo do dato atto a contenere lettere o frasi. Puo' essere definito in tre maniere, ma l'unica che non crea mai problemi e' utilizzando i doppi apici, esempio:

 <?php
 $var = "Ma che bella giornata! Voglio proprio farmi
 una passeggiata!" ;
 ?>

Poiche' il simbolo del dollaro ($) e' considerato l'inizio di una variabile, per poter utilizzare il carattere del dollaro, bisogna farlo precedere dal backslash ($ \backslash$). Quindi possiamo scrivere il seguente codice:

 <?php $soldoni = "dollari" ;
 echo "Quanti bei dollari" ;
 echo "Quanti bei \$ \$ ";
 echo "Quanti bei $soldoni" ;
 ?>

NULL

Il tipo NULL, non e' effettivamente un tipo, ma una variabile che non contiene nulla. Si puo' usare NULL quando si vuole rendere vuota una variabile:

 <?php $var = NULL ?>

Matrici

Le matrici meritano un discorso a parte. Esse, in PHP, secondo alcuni debbono essere inquadrate come un tipo di dato alla stregua degli altri, in realta' quando si definisce una matrice, si assegna ad una variabile lo schema di una matrice, e i dati all'interno di essi possono essere a loro volta una matrice, annidandosi all'infinito. Per definire delle matrice si usa la parola array(). Esempio:

 <?php $pane = array( acqua, farina, sale, lievito);
 echo $pane[0] ; /*scrive acqua*/
 ?>

Come si vede, se non si specifica diversamente, ogni elemento viene numerato a partire da zero. Per definire diversamente gli identificatori della matrice (chiamati indici in matematica) bisogna usare la sequenza =>. Esempio:

 <?php 
 $corpo = array( 
 testa => array( davanti => "occhi, naso e bocca", laterale => "orecchie"), 
 busto => "Petto, addome e schiena",
 gambe => "polpacci, ginocchia e piedi");
 echo $corpo['testa']['davanti']; /*scrive occhi,naso e bocca*/
 ?>

Come si vede un elemento e' a sua volta formato da una matrice, questo rende possibile creare matrici dalle forme piu' svariate e irregolari. Quando di richiama un elemento di una matrice attraverso una parola si consiglia caldamente di utilizzare i singoli apici prima e dopo, altrimenti, se esiste una costante con lo stesso nome, il server utilizzera' il valore di tale costante.

Variabili predefinite

Esistono delle variabili (o delle matrici) gia' definite all'interno di PHP, che contengono informazioni preziose sia riguardanti il server su cui gira PHP, sia su l'utente e il suo browser connesso al server. Ecco una lista:

  • $GLOBALS :E' la matrice superglobale, contiene tutte le variabili.
  • $_SERVER :E' la matrice che contiene tutte le variabili del server, una volta si chiamava $HTTP_SERVER_VARS.
  • $_GET :Serve per gli scrip http che usano get.
  • $_POST :Serve per gli script http che usano post.
  • $_COOKIE :Serve per gli script http che usano cookies.
  • $_FILES :Serve per caricare sul server files col metodo post.
  • $_ENV :Riguardano l'ambiente in cui si lavora (server, browser, connessione...)
  • $_REQUEST :Riguarda gli input utente che non debbono essere controllati (sicuri)
  • $_SESSION :Riguarda la sessione (o connessione) in corso, per evitare di confondere l'utente con un altro utente.

Confrontare i valori delle variabili

E' possibile in PHP, come in molti altri linguaggi di programmazione confrontare i valori di due variabili, per esempio e' possibile verificare se un numero e' maggiore o minore di un altro. I confronti possibili sono i seguenti:

  • $a == $b :Uguaglianza. Verifica se due valori siano uguali e ritorna il valore VERO (true).
  • $a === $b :Identita'. Serve a controllare non solo se hanno lo stesso valore ma se sono anche dello stesso tipo.
  • $a != $b, oppure, $a $ <>$ $b :Diversita'. Controlla che due valori siano diversi.
  • $a !== $b :Non identici. Controlla se i valori sono diversi o non sono dello stesso tipo.
  • $a < $b :Minore.
  • $a > $b :Maggiore.
  • $a <= $b :Minore o uguale.
  • $a >= $b :Maggiore o uguale.

Operatori logici

Gli operatori logici servono a verificare se certe situazioni avvengono contemporaneamente o almeno una di un gruppo, come in tanti altri limguaggi di programmazione essi sono:

  • $a and $b, oppure, $a && $b :E logico. Controlla che entrambe siano vere.
  • $a or $b, oppure, $a $ \parallel$ $b :O logico. Almeno una delle due deve essere vera.
  • $a xor $b :Negazione di o logico. Ritorna il valore vero se una delle due e' vera, ma non entrambe.
  • !$a :Negazione. Nega quello che segue.

Operatori di stringhe

Esiste solo un operatore predefinito per le stringhe ed e' il punto (.), esso permette di unire piu' stringhe. Esempi:

 <?php $a = "Mi piace ";
 $b = "il gelato";
 $c = $a . $b ;
 echo $c ; /*scrive Mi piace il gelato */
 ?>

Scegliere

Il PHP, come molti linguaggi di programmazione, permette di far compiere delle scelte a seconda del verificarsi di certe condizioni, tipo:Se e' mattino scrivi "Buon Giorno", se e' sera scrivi "Buona Sera".

IF

Il costrutto IF permette di operare delle scelte, la sintassi di IF e' la seguente:

 <?php
 if ($a > $b) {
 echo "$a e' piu' grande di $b <br>";
 $c = $a + $b ;
 echo "la somma di $a piu' $b e' $c";
 }

Come si vede il costrutto if controlla l'espressione tra parentesi e se e' vera eseguira' le istruzioni fra parentesi graffe, altrimenti il codice fra parentesi graffe non sara' eseguito e il programma procedera' oltre.

Invece di scrivere due espressioni IF una dopo l'altra e' possibile aggiungere il costrutto ELSE per poter prendere delle decisioni scrivendo meno righe di codice. Esempio:

 <?php
 if ($a > $b) {
 echo "$a e' piu' grande di $b <br>";
 }
 else { echo "$a non e' maggiore di $b"};
 ?>

Come vedete non si puo' affermare che se a non e' maggiore di b esso sia minore (potrebbe essere anche uguale), quindi bisogna prendere piu' decisioni in fila, per questo c'e' il costrutto ELSEIF. ELSEIF permette di incapsulare una serie di condizioni (quante vogliamo) una dietro l'altra, per permetterci di considerare tutte le possibilita'.

 if ($a > $b) {
     echo "$a e' maggiore di $b";
 } elseif ($a == $b) {
     echo "$a e' uguale $b";
 } else {
     echo "$a e' piu' piccolo di $b";
 }

In realta' e' la stessa cosa di:

 if ($a > $b) {echo "$a e' maggiore di $b";}
 else {
       if ($a == $b) {echo "$a e' uguale $b";} 
       else {echo "$a e' piu' piccolo di $b";}
      } 

ma c'e' chi lo trova piu' comodo.

Switch

L'istruzione Switch e come una serie di if, ma molto piu' comoda da scrivere:

 <?php
 switch ($ora) {
 case 8 : echo "Sono le otto";
   break;
 case 10 : echo "sono le dieci";
   break;
 default : echo "non sono nè le otto nè le dieci";
 }
 ?>

Pero' si puo' usare solo per le comparazioni, nel caso di testi puo' risultare molto comoda.

Cicli

I cicli nei linguaggi di programmazione sono essenziale per ripetere le stesse cose finche' non avviene un determinato evento. Anche se esistono varie forme per scrivere un ciclo, essi si possono ridurre sempre ad un semplice ciclo while, per questo verra' trattato per primo.

WHILE

Il ciclo while ripete le istruzioni all'interno delle parentesi graffe finche' l'espressione tra parentesi tonde e' vera, esempio:

 <?php
 echo "<nowiki><b>Conto alla rovescia <br></b></nowiki>";
 $i = 10;
 while ($i >= 0){
 echo "$i <br>";
 $i = $i - 1;
 }
 ?>

Come si vede e' possibile impallare il server, cioe' far compiere la stessa operazione al server all'infinito senza farlo mai uscire dal ciclo; nell'esempio precedente bastava omettere di diminuire la variabile i.

DO...WHILE

Il costrutto do...while... permette di far eseguire il ciclo almeno una volta e poi controllare dopo la prima esecuzione se la condizione e' vera o falsa. Esempio:

 $i = 0;
 do {
    echo "Anche se la variabile i non e' maggiore di 
    zero potete leggere questa frase" ;
 } while ($i>0);

Il ciclo FOR

Il ciclo for e' identico a come si usa in C/C++, quindi se lo sapete passate al prossimo paragrafo.

Il ciclo FOR e' un modo diverso (e piu' cervellotico) di scrive un ciclo while. Il ciclo FOR ha la seguente sintassi:

 <?php
 echo "<b>Conto alla rovescia</b><br>";
 for ($i = 10; $i >= 0; $i = $i -1) {
     echo  $i "<br>";
 }
 ?>

Tra parentesi c'e', sempre nel seguente ordine diviso da punto e virgola (;):

  • l'inizializzazione della variabile (opzionale);
  • la condizione;
  • l'incremento o il decremento della variabile (opzionale!);

Uscire dai cicli con break

Per uscire dai cicli, per evitare cicli che si ripetono all'infinito, si puo' usare il comando break per uscire sia per elaborare costrutti complicati che per mantenere delle uscite di sicurezza all'interno del ciclo.

 <?php
 $i=5;
 while ($i > 3) do {
 echo "Cavolo ho scritto un ciclo infinito!";
 break;
 }
 ?>

FOREACH

Dal PHP4 in poi e' stato introdotto questo cotrutto che permette di ripetere un'operazione quante volte sono gli elementi di una matrice, utilizzando ogni volta un valore diverso, e in sequenza, della matrice. Esempi:

 <?php
 $matrice = array( 1 , 5, 67 , 35 , 10 , 10 , 5 , 98, 73);
 echo "I numeri maggiori di dieci all'interno della matrice sono:";
 $a = 0;
 foreach ( $matrice as $b ) {
 IF ($b > 10) {$a = $a + 1;}
 }
 echo $a;
 ?>

Funzioni

Una funzione e' una serie di operazioni, che il programmatore puo' evitare di riscrivere ogni volta, avendone definito la funzione che le richiama:

 function nome (argomento1, argomento2, ... , argomentoN) {
 comandi;
 return valore ;
 }

La funzione accetta dei valori come argomenti e ritorna il valore che vogliamo, ma facciamo un esempio:

 function saluto ( $nome) {
   $saluto = "Ciao " ;
   $risultato = $saluto . $nome ;
   return $risultato ;
 }

Come vedete e' possibile usare la funzione saluto per creare un saluto:

 $miosaluto = saluto( max ) ;

Se si vuole far uscire piu' di un valore da una funzione, i valori possono essere messi in un'unica matrice; sfortunatamente tutti i valori debbono essere dello stesso tipo.

Includere funzione di altre pagine

Se volgiamo risparmiare tempo nello scrivere funzioni, possiamo scrivere le funzioni su una pagina php, e poi includerla col comando include();

 include("paginapienadifunzioni.php");

In questo modo cio' che scriviamo in una pagina puo' essere incluso in tutte le pagine che vogliamo, senza doverle riscrivere.

Passare gli argomenti per riferimento

Usando le funzioni noterete che esse non alterano le variabili al di fuori di esse:

 $totale = 0;
 function somma ($a, $b, $totale) {
  $totale = $a + $b; #sembra che cambi la variabile "totale"
  echo $totale;
 }
 somma ( 2 , 2 , $totale); #scrive 4
 echo $totale; #scrive 0

Per passare una variabile per riferimento, bisogna anteporre la lettera &:

 $totale = 0;
 function somma ($a, $b, &$totale) {
 $totale = $a + $b; #questa volta cambia la variabile "totale"
 echo $totale;
 }
 somma ( 2 , 2 , $totale); #scrive 4
 echo $totale; #scrive 4

Date

In PHP esiste la funzione getdate() che permette di ottenere le informazioni sulle date. LA funzione getdate() restituisce una matrice della seguente forma:

 $secondi = $date['seconds'];
 $minuti = $date['minutes'];
 $ore = $date['hours'];
 $giornodelmese = $date['mday'];
 $giornodellasettimana = $date['wday'];
 $mese = $date['mon'];
 $anno = $date['year'];
 $giornodellanno = $date['yday'];
 $giornodellasettimana_numero = $date['weekday'];
 $mese_numero = $date['month'];

Stringhe

Per le stringhe esistono parecchie funzioni, ecco le principali.

Ricerca

Per ricercare qualcosa all'interno di stringhe, esiste la funzione strstr:

 strstr( stringaInput , cosacercare)

questa funzione restituisce tutto l'input a partire dalla prima occorrenza del testo cercato. esempio:

 $email = 'max@linux.com';
 $domain = strstr( $email , '@');
 $newemail = 'giorgio'.$domain;  #newemail=giorgio@linux.com

Leggere e scrivere su files

Con il PHP e' possibile leggere e scrivere su file con le seguenti funzioni:

  • fopen()
  • file()
  • fwrite()
  • fclose()

Aprire un file

Per aprire un file, cioe' per dire al sistema operativo del server ospitante il PHP, Attenzione voglio lavorare col suddetto file, guai a chi me lo tocca! (i gergo si dice aprire uno streaming verso il file), si usa la funzione fopen():

 fopen( nomefile, modalità);

Il nome del file contiene anche il percorso (assoluto o relativo).

Le modalita' possono essere tre:

  • r : lettura (non lo voglio modificare)
  • w : scrittura, cancellandone prima il contenuto. Se il file non esiste viene creato.
  • a : scrittura aggiungendo i dati alla fine del file (append). Se il file non esiste viene creato.

La funzione fopen() restituisce un intero che indica il file nel sistema operativo, e' importantissimo salvare questa informazione.

Esempio:

 $file = fopen( dati.txt , a );

Leggere un file

Per leggere un file si usa la funzione file():

 file( indirizzofile)

restituisce il contenuto del file, esempio:

 $file = fopen( dati.txt , a );
 $contenuto = file( $file);

Scrivere in un file

Per scrivere in un file si usa la funzione fwrite():

 fwrite( indirizzofile, dati);

esempio:

 $file = fopen( dati.txt , a );
 fwrite( $file, "Ciao a tutti");

La funzione fwrite() ritorna il numero di byte scritti (puo' essere usato per controlli).

Chiudere un file

E' importantissimo chiudere un file, se non viene chiuso, il sistema operativo potrebbe non scriverlo effettivamente sul disco e quindi alla spegnimento della macchina perdere tutti i dati. Per chiudere un file si sua la funzione fclose():

 $file = fopen( dati.txt , a );
 fwrite( $file, "Ciao a tutti");
 fclose($file);

La funzione fclose() restituisce vero se e' riuscita a chiudere il file, altrimenti falso.

Cookie

I cookie sono dei file di testo che vengono memorizzati sul computer del visitatore del nostro sito. Questi file, di solito, sono utilizzati per memorizzare i dati del visitatore e mantenrli per un periodo di tempo. Per esempio un cookie potrebbe contenere al su interno il nome del proprietario, il colore preferito dello sfondo, oppure il suo cibo preferito. Sfruttando i cookie e' possibile ripristinare delle impostazioni personali di ogni utente che ci ha visitato.

Per salvare un cookie si usa il comando setcookie():

 setcookie(nomecookie , dati , scadenza  , percorso , domizio , sicurezza) ;

la scadenza e' espressa in secondi, dopo la scadenza tutti le altre voci sono opzionali.

Esempio:

 setcookie("Testcookie", "Ciao belli!" , time()+3600);

Nell'esempio il coockie di nome Testcookie, contenente Ciao belli!, durera' un 'ora, poi verra' cancellato dal coputer del visitatore.

Per leggere un cookie basta leggere la variabile della matrice dei cookie (contenente tutti cookie):

 echo $_COOKIE[Testcookie]; #scrive Ciao belli!

Per eliminare un cookie basta cambiare la data in modo che sia scaduta:

 setcookie("Testcookie", "" , time()-3600);

Generare numeri casuali

Premettiamo cosa si intende che un computer generi numeri casuali: un computer non puo', per come e' costruito, dire a caso dei numeri. Qualunque cosa faccia un computer, deve essere decisa a priori da un essere umano; per questo motivo, l'unico modo che si ha per ottenere un numero casuale da un computer, e' fargli elaborare un calcolo talmente complicato, il cui risultato cambi nel tempo, tale che nessuno lo possa predire. Per chiarirci, se diciamo ad un computer di contare i millisecondi che sono trascorsi dal 1970, il conto sara' ogni volta diverso, e nessuna persona potra' predirlo con facilita'; se inoltre gli chiediamo il resto della divisione per 10 di tale numero, otterremo un numero tra 0 e 9 che nessuno potra' con assoluta certezza predire in anticipo.

Per rendere la generazione di numeri casuali esiste la funzione srand() che una volta avviata fa partitre una sequenza di numeri casuali da quale attingere, questa sequenza dipende anche dal numero con cui viene fatta partire:

 srand( iniziatore);

un metodo molto comodo per inizializzarlo e' il seguente:

 srand((double) microtime * 1000000);

Una volta inizializzato per ottenere un valore basta richiamare la funzione rand():

 rand( inzio, fine);

rand() restituisce un valore tra inizio e fine, se sono omessi esce un numero del tutto casuale.

Ridirigere verso un'altra pagina

Molte volte vi verra' voglia di mandare un utente verso una od un'altra pagina a seconda delle sue scelte, cio' e' possibile con al funzione header():

 header("Location: pagina.php");
 exit;

l'indirizzo della pagina puo' essere sia relativo, che assoluto; mentre il comando exit evita che per errore vengano eseguite altre cose, esempio:

 if ($scelta == "informazioni"){
    header("Location: <nowiki>http://www.wikipedia.org</nowiki>");
    exit;
 }
 if ($scelta == "gioco"){
     header("Location: gioco.php");
     exit;
 }
 echo "Non hai scelto ne' informazioni, ne' gioco";

Creare immagini col PHP

Il PHP e' talmente potente che vi permette di creare immagini (JPEG, PNG), con scritte e altro, cio' permette di avere immagine che cambiano a seconda delle condizioni.

Iniziamo

Per creare l'immagine bisogna usare la funzione ImageCreate(), questa funzione crea un identificatore d'immagine (cioe' un handle, per chi mastica la programmazione), cioe' un numero con cui e' possibile capire di quale immagine stiamo parlando. Vediamo un esempio:

 $italia = ImageCreate( 100 , 100); # risoluzione x 100 pixel, risoluz. y 100 pixel
 $francia = ImageCreate( 100 , 100);
 $spagna = ImageCreate( 100 , 100);

in questo modo abbiamo creato 3 identificatori per 3 immagini diverse, senza di cio' non sarebbe possibile creare e lavorare su piu' immagini nella stessa pagina php.

Quando abbiamo finito di lavorare con le immagini e' buona norma liberare la memoria RAM che e' stata occupata per crearle (comunque non verranno mai cancellate dall'harddisk) con la funzione ImageDestroy():

 ImageDestroy($italia);

I colori

Anche per i colori bisogna passare per un identificatore, grazie alla funzione ImageColorAllocate():

 $colore = ImageColorAllocate( handleImmagine, num1, num2, num3);

un identificaore per un colore non puo' essere creato se non si specifica per quale immagine puo' essere utilizzato (anche se non ne capisco l'utilita'), inotlre bisogna indicare i 3 numeri interi (da 0 a 255) che lo definiscono (il primo esprime la quantita' di rosso, il secondo di verde, il terzo di blu):

 $rosso =  ImageColorAllocate( $italia, 255, 0, 0);
 $verde =  ImageColorAllocate( $italia, 0, 255, 0);
 $bianco =  ImageColorAllocate( $italia, 255, 255, 255);

Pero' per ora non li abbiamo ancora usati, sono solo pronti da usare.

Per riempire una immagine di un colore basata usre la funzione ImageFill(), che ha la seguente sintassi:

 ImageFill( handleImmagine, x, y, colore);

dove handleImmagine e' l'idenfificatore dell'immagine, x e' la coordi<?nata x da dove partire , y la coordinta y da dove partire, colore l'identificatore del colore:

 ImageFill($italia, 0, 0, $verde);

La nostra prima immagine

Per creare un'immagine sull'harddisk bisogna indicare l'immagine e dove salvarla:

 ImageJPEG($italia, 'foto/italia.jpg'); #per una jpg
 ImagePNG($italia, 'foto/italia.png'); #per una png

Ecco finalmente un esempio per creare un'immagine (attenzione, bisogna che il PHP abbia i permessi di creare immagini):

 <?php
 $img = ImageCreate(100,100);
 $rosso = ImageColorAllocate( $img, 255, 0, 0);
 ImageFill($img, 0, 0, $rosso);
 ImageJPEG($img, 'quadratorosso.jpg');
 ?>
 <img src='quadratorosso.jpg'>

Rettangoli e quadrati

Con la funzione ImageFilledRectangle() si crea un rettangolo pieno all'interno dell'immagine, mentre con ImageRectangle si crea un rettangolo vuoto (diciamo una cornice):

 ImageFilledRectangle(imagine, x1, x2, y1, y2, colore);
 ImageRectangle(imagine, x1, x2, y1, y2, colore );

Con x1 e y1 si intendono le coordinate d'inizio del rettangolo, e con x2 e y2 le coordinate di fine del rettangolo. Esempio:

 ImageFilledRectangle($image, 10, 10, 20, 30, $red);
 ImageRectangle($image, 30, 10, 40, 60, $blu);

Linee

La funzione ImageLine() e' identica a quella per i rettangoli:

  ImageLine(imagine, x1, x2, y1, y2, colore);

cioe':

  ImageLine($image, 30, 10, 40, 60, $blu);

Testo

Per inserire del testo basta usare la funzione ImageString() (oppure ImageStringUp() per scritte ruotate di 90°):

 ImageString(immagine, dimensionefont, x, y, testo, colore);

esempio:

 ImageString($italia, 14, 0, 0, 'Ciao Italia', $verde);

Centrare il testo

Per centrare il testo ci viene in aiuto la funzione ImageFontWidth(), che ci dice la lunghezza in pixel di un carattere, una volta specificato l'altezza del font:

 $text="Ciao mondo!";
 $x=ImageFontWidth(6)*strlen($text);
 ImageString($image, 6, $x, 50, $text, $rosso); #cosi' scrive centrato orizzontalmente

Creare immagini da immagini esistenti

Se abbiamo un immagine e vogliamo aggiungervi sopra un testo, o qualsiasi altra cosa, bisogna prima creare l'identificatore dell'immagine e poi lavorarci come una immagine vuota:

 ImageCreateFromJPEG( nomefile);

esempio

 $img = ImageCreateFromJPEG("sfondi/mare.jpg");
 $rosso = ImageColorAllocate($img,255,0,0);
 ImageString($img,4,50,50,"Buone vacanze",$rosso);
 ImageJPEG($img, "poster.jpg");
 ImageDestroy($img);

Funzioni utili

Mantenere gli a capo

Questa funzione, che non e' mia, serve a mantenere un correto numero di a capo, anche se stiamo usando windows (e' risaputo che quando andiamo con windows mette un carattere in piu').

 function FormatStr($stringa){
  $stringa = htmlentities($stringa);
  $stringa = str_replace(CHR(13), "", $stringa);
  $stringa = str_replace(CHR(10) & CHR(10), "<br>", $stringa);
  $stringa = str_replace(CHR(10), "<br>", $stringa);
  return $stringa;    
 };

In questo modo non avremo piu' problemi con gli a capo, neppure nelle tabelle.

Caricare un file in una stringa

Questa funzione carica tutto il contenuto di un file in una stringa.

  function LoadFile($filepath) {
   if (file_exists($filepath)) {
      $fh = @fopen($filepath,"r");
      return fread($fh,filesize($filepath));
      } else {
      return false;
      }
   };