PHP Introduzione alla programmazione Dott. Ing. Ivan Ferrazzi V1.4 del 15/01/2014



Documenti analoghi
PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

MySQL Database Management System

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

19. LA PROGRAMMAZIONE LATO SERVER

GRUPPO CAMBIELLI. Posta elettronica (Webmail) Consigli di utilizzo

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

PHP e MySQL. Guida scaricata da

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014

I file di dati. Unità didattica D1 1

MySQL Database Management System

Costruzione di Siti Web con PHP e MySQL. Lezione 4: Operatori, Array, Controlli e Cicli

Lavorare con MySQL Parte Seconda.

JAVASCRIPT. Tale file è associato alla pagina web mediante il tag <script> inserito nella sezione <head> con la seguente sintassi:

BASI DI DATI Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

EXCEL FUNZIONI PRINCIPALI

Invio SMS. DM Board ICS Invio SMS

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Integrazione InfiniteCRM - MailUp

IL MIO PRIMO SITO: NEWS

Concetti fondamentali dei database database Cos'è un database Principali database

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Database 1 biblioteca universitaria. Testo del quesito

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Strutturazione logica dei dati: i file

SOMMARIO... 3 INTRODUZIONE...

Guida all uso di Java Diagrammi ER

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

File, Modifica, Visualizza, Strumenti, Messaggio

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Corso di PHP. Prerequisiti. 1 - Introduzione

SWISSCAST. Descrizione della modalità di esportazione di documenti in pagine HTML

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

Per accedere clicca su START o AVVIO (in basso a sinistra sul tuo schermo), poi su PROGRAMMI, ACCESSORI e infine su BLOCCO NOTE.

Guida all uso. Esso sarà riportato nell intestazione. Vediamo:

FtpZone Guida all uso Versione 2.1

HTML HTML. HyperText Markup Language. Struttura di un documento. Gli elementi essenziali di un documento HTML sono i seguenti TAG: <HTML>...

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

STAMPA UNIONE DI WORD

Esercizio data base "Biblioteca"

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

4 3 4 = 4 x x x 10 0 aaa

Il calendario di Windows Vista

Creare un nuovo articolo sul sito Poliste.com

GESGOLF SMS ONLINE. Manuale per l utente

Esercizi di JavaScript

DOCUMENTO ESPLICATIVO

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Le query. Lezione 6 a cura di Maria Novella Mosciatti

5.3 TABELLE RECORD Inserire, eliminare record in una tabella Aggiungere record Eliminare record

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.

Interfaccia di base di GroupWise WebAccess

GUIDA UTENTE BILLIARDS COUNTER (Vers )

Esame di Informatica CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO. Facoltà di Scienze Motorie

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore

Pagina 1 di 10

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia

GERARCHIE RICORSIVE - SQL SERVER 2008

Progettazione Web Applicazioni client-server

<?php include './include/page.php';

Introduzione alla programmazione in C

1. Le macro in Access 2000/2003

MANUALE PER L UTILIZZO DELLA FUNZIONE EVENTI Rel.1.2 del 29 gennaio 2004

SISTEMI DI NUMERAZIONE E CODICI

Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta

PROGRAMMA GESTIONE TURNI MANUALE UTENTE. Programma Gestione Turni Manuale Utente versione 1.1

Progetto ittorario Anno scol

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

OSSIF WEB. Manuale query builder

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

Lezioni di Laboratorio sui Data Base

MANUALE UTENTE Fiscali Free

Guida operativa. My Legal Corner. BestSoft SOFTWARE IN SANITÀ

Guida Migrazione Posta Operazioni da effettuare entro il 15 gennaio 2012

Access. P a r t e p r i m a

MANUALE PARCELLA FACILE PLUS INDICE

Scrivere uno script php che, dato un array associativo PERSONE le cui chiavi sono i

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Identificare le diverse parti di una finestra: barra del titolo, barra dei menu, barra degli strumenti, barra di stato, barra di scorrimento.

POSTECERT POST CERTIFICATA GUIDA ALL USO DELLA WEBMAIL

Introduzione allo sviluppo Web. Studium Generale, a.a , II semestre

Sistema Informativo Gestione Fidelizzazione Clienti MANUALE D USO

Registratori di Cassa

COME ELIMINARE PARTI DEL TEMPLATE IN PAGINE SINGOLE

Manuale Utente Albo Pretorio GA

Calcolare il massimo di una lista

User Tools: DataBase Manager

Richiesta pagina PHP (es: index.php)

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

Transcript:

PHP Introduzione alla programmazione Dott. Ing. Ivan Ferrazzi V1.4 del 15/01/2014 1/57

Copyright 2014 Dott.Ing. Ivan Ferrazzi Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. 2/57

Indice generale INTRODUZIONE...5 Le differenze tra HTML, Javascript, CSS e PHP...6 IL LINGUAGGIO...7 I concetti base...7 Iniziando con il comando echo...9 Il blocco condizionale if...else...10 Il blocco condizionale switch...11 Il blocco ciclico for...12 Il blocco ciclico while...12 Gli array...13 Il blocco ciclico foreach...16 Le variabili di ambiente server $_SERVER...17 Lavorare con le date...17 Lavorare con le stringhe...19 Lavorare con file/cartelle...22 Le funzioni...24 Includere altri file...26 TRASPORTARE VARIABILI CON GET E POST...28 Il metodo GET...28 Il metodo POST...30 Vediamo un esempio pratico...31 INTERAGIRE CON MYSQL...33 La connessione...33 Le query select...34 Le manipolazioni insert, update e delete...35 Esempio completo...36 LE SESSIONI...41 I comandi principali...41 Le sessioni con i cookie...42 Le sessioni senza cookie (SID)...43 Soluzione ideale...44 L'UPLOAD DEI FILE...45 Form principale...45 Raccolta file in upload...46 PHP e XML...47 Validare contenuti XML...47 SimpleXML...48 OOP...49 Creare l'oggetto...49 Prefisso $this->...50 L'istanza dell'oggetto...50 Le costanti...51 I costruttori...51 Proprietà e metodi pubblici, protetti e privati...52 I metodi speciali...52 L'eredità tra classi...55 3/57

Le classi astratte...56 Le interfacce...56 Funzioni PHP per le classi...57 4/57

INTRODUZIONE L'unico linguaggio che i browser riescono ad interpretare è l'html, o derivati di esso. L'HTML ha però lo svantaggio che bisogna sapere in anticipo quello che vogliamo visualizzare mediante l'apposita pagina web. Prendiamo un semplice esempio: Vogliamo creare un sito di commercio elettronico che visualizza un elenco degli articoli che proponiamo e per ogni articolo vogliamo poter visualizzare una scheda tecnica con le proprietà dello specifico articolo in dettaglio. Per realizzare una cosa simile utilizzando il linguaggio HTML dobbiamo creare una pagina che contiene l'elenco degli articoli e una singola pagina per ogni articolo che vogliamo visualizzare come scheda tecnica dettagliata. Per proporre sul nostro sito 50 articoli dobbiamo creare 51 pagine statiche in HTML. Notiamo l'esponenziale crescita della complessità in base al numero degli articoli da visualizzare, per non parlare dell'ammontare di lavoro ad ogni nuovo articolo da aggiungere, da togliere o da modificare. Sarebbe interessante poter utilizzare solo due pagine web (una per la visualizzazione dell'elenco, l'altra per la visualizzazione della scheda dettagliata ) in grado di cambiare il proprio contenuto in base a valori magari estratti direttamente da una banca dati. L'elenco potrebbe cambiare in base all'attuale stato della banca dati, mentre la scheda tecnica potrebbe essere compilata ogni volta con i dati dell'articolo desiderato. Bene, quello di cui abbiamo bisogno è PHP. Il linguaggio PHP è un linguaggio detto dinamico perchè permette, appunto, di creare delle pagine web che si aggiornano dinamicamente in base a determinate situazioni. 5/57

Le differenze tra HTML, Javascript, CSS e PHP Il nostro browser è in grado di interpretare il linguaggio HTML che può essere ampliato con linguaggi come Javascript, oppure direttive di stile come CSS, ma non è in grado di interpretare il linguaggio PHP. PHP viene infatti direttamente interpretato dal webserver che ne invia il risultato come pagina HTML al Browser stesso. Se il webserver riceve la richiesta riguardante una pagina web con estensione.html ne invia direttamente il contenuto al browser richiedente. Se però la richiesta riguarda una pagina web con estensione.php (l'esensione di default per pagine web con all'interno blocchi PHP) la pagina non viene direttamente inviata, ma sottoposta prima all'accurata attenzione dell'interprete PHP che deve essere installato sul webserver stesso. L'interprete PHP interpreta, appunto, il contenuto del file sostituendo tutti i blocchi PHP con il relativo risultato ottenendo così un unico file HTML. Questo viene poi inviato direttamente al browser, in grado ora di leggerne il contenuto e di creare la struttura desiderata. 6/57

IL LINGUAGGIO Iniziamo a vedere i concetti base del linguaggio PHP per poi proseguire con una serie di approfondimenti. I concetti base I blocchi PHP. Come precedentemente accennato il linguaggio PHP viene incapsulato direttamente all'interno di una struttura HTML. Abbiamo quindi bisogno di un codice che permetta all'interprete di riconoscere l'inizio e la fine di un blocco PHP. Il codice iniziale e finale che utilizziamo è il seguente:... Ne esiste anche una forma più breve, ossia: <?... ma si consiglia di utilizzare quella classica perché la forma breve potrebbe non essere più supportata in versione più recenti. Il linguaggio PHP è case sensitive (maiuscole e minuscole vengono interpretate diversamente) per quanto riguarda le variabili definite, mentre per il resto case insensitive. Il punto e virgola. Ogni riga di comando deve essere terminata con il punto e virgola (;). L'invio all'interno del file PHP non, infatti, rilevanza. Comandi possono, nel 7/57

maggiore dei casi, proseguire anche su più righe. Per questo motivo dobbiamo avere la possibilità di segnalare all'interprete quando la nostra riga di comando è giunta al termine. I commenti. Ogni codice che si rispetti contiene varie righe di commento. I commenti sono importanti per far capire ad eventuali altri programmatori cosa stiamo facendo, ma sono altrettanto importanti perché ci danno la possibilità di capire al volo il comportamento di un nostro codice a lunga distanza di tempo. All'interno del blocco PHP possiamo aggiungere come commento una singola riga usando il doppio slash come segue: //riga di commento oppure possiamo racchiudere diverse righe di commento utilizzando il /* prima e il */ dopo al blocco di commento: /* Questa è la prima riga di commento. Questa è la seconda riga di commento. */ Le variabili. Le variabili sono parte fondamentale di ogni linguaggio di programmazione. Le variabili danno, infatti, la possibilità di memorizzare temporaneamente dei valori (numerici, di testo o come oggetti) in maniera tale da poter essere richiamati o manipolati in un qualsiasi momento. Tutte le variabili iniziano con il simbolo del dollaro ($) e utilizziamo il simbolo dell'uguale per assegnarle un valore. $NOME = Ivan ; $ETA = 35; $VAL1 = 10; $VAL2 = 2; $RISULTATO = $VAL1 + $VAL2; Nell'assegnazione di un valore utilizziamo le virgolette ( ) per assegnare valori testuali e le lasciamo via se vogliamo assegnare valori numerici. Vediamo ora un piccolo esempio per comprendere al meglio quanto spiegato: $NOME = Ivan Ferrazzi ; <html> <head></head> <body> Io mi chiamo echo $NOME;. </body> </html> 8/57

che darà come risultato Io mi chiamo Ivan Ferrazzi. Iniziando con il comando echo Il comando echo è uno dei comandi più utilizzati nonostante la sua semplicità. Questo comando, infatti, non deve fare altro che restituire un testo datogli tra virgolette ( ) oppure apici (') come risultato. Detto così sembra una cosa molto banale ma in effetti non lo è. Infatti, è proprio l'utilizzo delle virgolette o degli apici che ne modificano il comportamento. Un testo inserito tra virgolette viene prima interpretato prima di essere stampato su schermo, mentre un testo tra apici viene mandato sullo schermo esattamente come scritto. Le virgolette le utilizziamo quando al suo interno vogliamo utilizzare delle variabili oppure quando dobbiamo utilizzare dei caratteri speciali che iniziano con il back space (\). Vediamo un esempio: $NOME = Ivan Ferrazzi ; <html> <head></head> <body> echo Io mi chiamo $NOME.<br /> ; echo 'Io mi chiamo $NOME.<br />'; </body> </html> Nel browser vediamo apparire le seguenti righe: Io mi chiamo Ivan Ferrazzi. Io mi chiamo $NOME. Notiamo quindi la mancata interpretazioni con l'utilizzo degli apici (seconda riga visualizzata). L'utilizzo dei caratteri speciali diventa indispensabile quando delle virgolette utilizzate all'interno della stringa stessa potrebbero andare in conflitto con le virgolette che identificano l'inizio e la fine della stringa stessa. Il seguente esempio causerebbe un errore echo <font face= Verdana >ciao</font> ; ----------- ------------ e andrebbe modificato come segue: 9/57

echo <font face=\ Verdana\ >ciao</font> ; All'interno del comando echo possiamo utilizzare la virgola (,) o il punto (.) per concatenare delle parti di stringa. La riga echo Ciao. come. stai! ; da lo stesso risultato di echo Ciao come stai! ; Questa forma può essere utilizzate anche per concatenare delle stringhe a delle variabili come segue echo Questo è il valore:. $VALORE. <br /> ; Il blocco condizionale if...else Il blocco if semplice permette di elaborare le istruzioni presenti nel blocco stesso se la condizione fornita restituisce un esito vero. Nella condizione possiamo paragonare dei valori con gli operatori == (uguale ),!= (diverso), > (maggiore di), < (minore di), >= (maggiore o uguale) oppure <= (minore o uguale). $NOME = Ivan ; if($nome == Ivan ) { echo Ciao Ivan ; Questo semplice esempio verifica il contenuto della variabile $NOME (notiamo l'utilizzo delle virgolette nell'uso di valori testuali) e stampa poi Ciao Ivan su schermo, dato l'esito vero della condizione fornita. Possiamo estendere il blocco delle condizioni concatenando più condizioni fra loro utilizzando && (come e logico) oppure (come o logico). Due condizioni concatenate con && restituiscono un valore insieme vero solo se tutte e due le condizioni restituiscono un valore vero. Due condizioni concatenate con restituiscono un valore insieme vero se almeno una (o tutte e due) delle condizioni restituisce un valore vero. $UID = pippo ; $PWD = 12345 ; if(($uid == pippo ) && ($PWD == 12345 )) { echo Buon giorno pippo. ; Le singole condizioni vengono a loro volta incapsulate all'interno di parentesi tonde es. ($UID == pippo ). 10/57

In alcuni casi può essere interessante far elaborare un blocco di istruzioni a condizione rispettata oppure un'altro blocco di istruzioni nel caso contrario. In questo caso utilizziamo il comando in forma estesa if...else. if($valore < 10) { echo Il valore è minore di 10. ; else{ echo Il valore è uguale o maggiore di 10. ; Il blocco condizionale switch Nel blocco if...else descritto precedentemente è possibile far eseguire una serie di istruzioni a condizione con esito vero, oppure un'altra serie di istruzioni in caso contrario. In alcuni casi, però, diventa indispensabile poter scegliere tra più criteri di paragone diversi. In questi casi possiamo utilizzare il blocco switch che permette di paragonare una variabile con più valori diversi e comportarsi di conseguenza. Vediamo un semplice esempio: $VALORE = 12; switch($valore) { case 11: echo Il valore è 11. ; break; case 12: echo Il valore è 12. ; break; case 13: echo Il valore è 13. ; break; In questo esempio forniamo a switch la variabile $VALORE che viene paragonata con i vari valori definiti dopo ai vari case. Nel caso di case 12 l'interprete riconosce una corrispondenza ed inizia ad eseguire la sequenza di istruzioni definite all'interno di questo blocco case fino a quando incontra l'istruzione break che obbliga l'interprete ad uscire dal blocco switch per proseguire con il resto del programma. Nel caso di valori testuali possiamo scrivere $NOME = pippo ; switch($nome) { case pluto : echo Il tuo nome è pluto. ; break; case paperino : echo Il tuo nome è paperino. ; break; case pippo : echo Il tuo nome è pippo. ; break; Notiamo l'utilizzo delle virgolette per definire valori testuali. 11/57

Il blocco ciclico for Il for viene utilizzato per definire delle ripetizioni cicliche. Vediamo subito un semplice esempio: for($i = 0; $i < 5; $i++) { echo ciclo $i<br /> ; Il risultato sarà: ciclo 0 ciclo 1 ciclo 2 ciclo 3 ciclo 4 Quando l'interprete incontra un blocco for utilizza il primo parametro fornito, ossia $i = 0, per definire la variabile da utilizzare come controllo e per assegnarle subito il valore iniziale. Poi controlla il valore logico restituito dalla condizione del secondo parametro. Se restituisce un esito vero il blocco for viene eseguito altrimenti continua ad interpretare le istruzioni inserite dopo il blocco for. Dopo aver eseguito le istruzioni del for l'interprete utilizza il terzo parametro, nel nostro caso $i++, per incrementare il valore della variabile $i di uno. Poi ricontrolla la condizione ed esegue il blocco for in caso di risultato vero. L'interprete elaborare il blocco for fino a quando la condizione non restituisce un esito falso. La variabile definita all'interno del for può essere utilizzata anche all'interno dello stesso blocco di istruzioni. Il blocco ciclico while Il blocco ciclico while elabora le istruzioni presenti all'interno del blocco stesso fino a quando la condizione rimane vera. La struttura base è la seguente: while(condizione) { istruzioni... Vediamo il seguente esempio pratico: $i = 0; while($i < 5) { echo riga $i<br /> ; $i++; 12/57

Il risultato di questo comando sarà riga 0 riga 1 riga 2 riga 3 riga 4 Anche qui la condizione può essere composta da più condizioni unita da un e oppure o logico (vedi if). Gli array Gli array sono una forma particolare di variabile. Le variabili che abbiamo visto fino ad ora possono contenere solamente un unico valore. Questa limitazione potrebbe rendere impossibile l'utilizzo di variabili normali in casi specifici. Poniamo il seguente problema: Vogliamo dare all'utente la possibilità di memorizzare un numero indeterminato di valori. Non sapendo quanti valori l'utente andrà a registrare dobbiamo creare anticipatamente un numero abbastanza alto di variabili. Possiamo, ad esempio, utilizzare le variabili che vanno da $VALORE1 a $VALORE100. Se però l'utente ne volesse inserire 200 di valori. Il dover registrare una variabile prima del suo utilizzo può quindi essere, in alcuni casi, un problema. Vediamo di capire al meglio la differenza tra una variabile normale e gli array prendendo un esempio dal mondo reale. La variabile la possiamo vedere come il cassetto di un armadio. Sul cassetto ci incolliamo il nome (quindi il nome della variabile), mentre al suo interno ci mettiamo un oggetto (il valore della variabile). Mediante nome del cassetto identifichiamo il contenuto che vogliamo vedere. Immaginatevi di avere a disposizione un armadio con un numero imprecisato di cassetti. Ora non mettiamo il nome direttamente su un cassetto, ma poniamo il nome direttamente sull'intero armadio. Nel momento in cui abbiamo bisogno di uno spazio prendiamo il primo cassetto vuoto ci scriviamo sopra uno zero (0) e ci inseriamo l'oggetto desiderato. L'eventuale secondo cassetto lo etichettiamo con uno (1), il terzo con due (2), ecc. Per richiamare il contenuto di un cassetto bisogna quindi utilizzare il nome dell'intero armadio in combinazione con il numero del cassetto da aprire. Un array in PHP viene definito come segue: $ARMADIO = array(); In questo caso diciamo all'interprete che abbiamo bisogno di uno spazio ancora non definito. Nel momento in cui serve possiamo inserire un valore all'interno dei singoli cassetti. $ARMADIO[0] = Pippo ; 13/57

$ARMADIO[1] = Pluto ; $ARMADIO[2] = Paperino ; Per richiamare il contenuto di un cassetto possiamo scrivere: echo $ARMADIO[2]; che restituirà come risultato: Paperino Una funzione di PHP (vedremo più avanti come creare delle proprie funzioni) utilizzata con gli array è count(array). Questa funzione restituisce il numero degli elementi inseriti nell'array fornito come parametro. Il risultato di count($armadio) nel nostro caso sarebbe 3, quindi tre elementi inseriti. Vediamo ora un esempio pratico: <html> <head> </head> <body> $ARMADIO = array(); $ARMADIO[0] = Pippo ; $ARMADIO[1] = Pluto ; $ARMADIO[2] = Paperino ; for($i = 0; $i < count($armadio); $i++) { echo $ARMADIO[$i]. <br /> ; </body> </html> Il risultato è il seguente: Pippo Pluto Paperino Notiamo nell'esempio l'utilizzo di una variabile come indice dell'array ($ARMADIO[$i]). In alcuni casi può essere comodo non dover assegnare l'indice identificativo dell'array nel momento in cui si assegnano i vari elementi. Per questo motivo PHP ci mette a disposizione ulteriori metodi per settare il contenuto di un array. Uno è il seguente: $ARMADIO = array(); $ARMADIO[] = pippo ; //indice 0 $ARMADIO[] = pluto ; //indice 1 $ARMADIO[] = paperino ; //indice 2 14/57

Come notiamo in questo esempio non assegnamo gli indici quando settiamo il contenuto dei singoli elementi, ma utilizziamo le parentesi quadre vuote ([]). In questo caso si occuperà PHP dell'assegnazione degli indici partendo dal numero zero (0) ed incrementando di volta in volta. Possiamo però definire un array, con i suoi elementi, in una volta sola come segue: $ARMADIO = array( pippo, pluto, paperino ); Anche in questo caso sarà PHP ad assegnare gli indici partendo dal numero zero (0). pippo avrà l'indice 0, pluto l'indice 1 e paperino l'indice 2. Fino ad ora abbiamo visto l'utilizzo di indici numerici per l'identificazione di elementi all'interno dell'array. PHP ci mette a disposizione anche l'utilizzo di etichette per rendere l'identificazione di determinati elementi più semplice ed intuitivo. Vediamo il seguente esempio: $NOMI = array(); $NOMI['padre'] = Franco ; $NOMI['madre'] = Antonietta ; $NOMI['figlio'] = Matteo ; In questo caso non utilizziamo dei numeri come indici, ma delle etichette. Per visualizzare il contenuto della relativa variabile scriviamo: echo $NOMI['figlio']; Anche nel caso delle etichette possiamo assegnare i valori direttamente nella definizione dell'array: $NOMI = array('padre' => Franco, 'madre' => Antonietta, 'figlio' => Matteo ); Vediamo ora una serie di funzioni che possiamo usa con gli array: array_key_exists($chiave,$array); Restituisce true se il valore $chiave è presente come chiave all'interno dell'array fornito come parametro. array_keys($array [,$valore [,$compara]]); Restituisce un array con all'interno tutte le chiavi di $array. Con $valore possiamo estrarre le chiavi degli elementi che hanno il valore uguale al parametro fornito. $compara è un valore booleano che permette di attivare (true) la verifica precisa di uguale (===). array_merge($array1 [,$array2 [,$array3...]]); Restituisce un nuovo array con all'interno tutti gli elementi degli array forniti come parametro. Nel caso in cui trova elementi con la stessa chiave tiene l'ultimo elemento inserito. 15/57

array_pop($array); Restituisce l'ultimo elemento dell'array togliendolo definitivamente. array_push($array,$elemento [,$elemento...]); Aggiunge $elemento alla fine dell'array passato come parametro. In questo caso $array aumenta di dimensione. $elemento può contenere anche un array. array_rand($array [,$num_req]); Restituisce un array con $num_req chiavi estratte a caso dall'array fornito. Il blocco ciclico foreach Quando vogliamo estrarre il contenuto di un array associativo come quello visto precedentemente non possiamo utilizzare un semplice for perché non abbiamo a disposizione un indice sequenziale che ci permette di estrarre i vari valori. Possiamo in questo caso usare il blocco ciclico foreach in grado di leggere gli elementi di un array senza tenere conto degli indici assegnati: $NOMI = array('padre' => Franco, 'madre' => Antonietta, 'figlio' => Matteo ); foreach($nomi as $value) { echo $value. <br /> ; Il foreach assegna ad ogni ciclo gli elementi dell'array estrapolandone il valore. Il risultato sarà il seguente: Franco Antonietta Matteo Possiamo allo stesso modo recuperare anche gli indici utilizzati: $NOMI = array('padre' => Franco, 'madre' => Antonietta, 'figlio' => Matteo ); foreach($nomi as $key => $value) { echo $key : $value<br /> ; Come risultato abbiamo: padre : Franco madre : Antonietta figlio : Matteo 16/57

Le variabili di ambiente server $_SERVER PHP crea al suo interno delle variabili chiamate di ambiente che possono essere riprese all'interno di un nostro script. Queste variabili contengono informazioni utili come l'indirizzo IP del server, l'indirizzo IP remoto del client che si collega al nostro webserver, il nome della pagina PHP che il client sta visualizzando sul proprio browser, ecc. Tutte queste informazioni vengono inserite all'interno dell'array $_SERVER creato apposta per contenere questi dati. Vediamo gli inserimenti più utilizzati: $_SERVER['SERVER_ADDR'] $_SERVER['SERVER_NAME'] $_SERVER['QUERY_STRING'] $_SERVER['HTTP_REFERER'] $_SERVER['HTTP_USER_AGENT'] $_SERVER['REMOTE_ADDR'] $_SERVER['PHP_SELF'] Indirizzo IP del server Nome di dominio del server Query string utilizzata Sito dal quale siamo stati lincati Informazioni sul browser del client es. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586) Indirizzo IP del client remoto Nome della pagina PHP attuale Lavorare con le date Come in tutti gli altri linguaggi di programmazione anche in PHP diventa in alcuni casi indispensabile lavorare con le date. Per questo motivo abbiamo a disposizione due comandi che ci permettono di effettuare gran parte delle operazioni necessarie date e mktime. A partire dalla versione PHP 5.1.0 dobbiamo ricordarci di settare la timezone da utilizzare per la rappresentazione corretta della data e del tempo con il comando date_default_timezone_set(str_timezone); str_timezone Questo parametro è una stringa che identifica la timezone da utilizzare. La nostra timezone viene indicata dalla stringa Europe/Rome. Il comando date permette di formattare la visualizzazione della data corrente o di una data impostata con mktime. Il formato di questo comando è il seguente: date(formato[,timestamp]); formato Questo parametro è una stringa che contiene delle lettere predefinite per l'estrazione di determinati dati riguardante la data da visualizzare. Alcuni di queste lettere sono Y (visualizza l'anno a quattro cifre), m (visualizza il mese a due 17/57

timestamp cifre), d (visualizza il giorno a due cifre) e w (restituisce il giorno della settimana identificandolo con un numero 0- domenica, 1-lunedi,... 6-sabato). Questo è un valore numerico che identifica il numero dei secondi trascorsi dal 01/01/1970 alla data desiderata. Nel caso in cui venisse lascito via internamente verrebbe utilizzato il numero di secondi che identifica la data attuale. Vediamo un semplice esempio: echo date( d/m/y ); Questa semplice riga visualizza la data attuale come seguente: 15/04/2009 Il prossimo comando è mktime che permette di calcolare il numero dei secondo a partire dal 01/01/1970, valore che possiamo utilizzare poi all'interno del comando date. Il comando mktime utilizzare la seguente sintassi. mktime(ora,minuti,secondi,mese,giorno,anno) ora minuti secondi mese giorno anno Questo parametro permette di definire l'ora. Questo parametro permette di definire i minuti. Questo parametro permette di definire i secondi. Questo parametro permette di definire il mese. Questo parametro permette di definire il giorno. Questo parametro permette di definire l'anno. Per definire quindi la data 10/03/1978 alle 13.30 scriviamo: date_default_timezone_set( Europe/Rome ); $TIMESTAMP = mktime(13,30,0,3,10,1978); echo date( d-m-y,$timestamp); che restituisce come risultato 10-03-1978 La costruzione della data con mktime ci permette di far calcolare in automatico dal sistema anche gli spostamente. Per restituisce il timestamp della data di 10 giorni fa possiamo scrivere: $TIMESTAMP = mktime(0,0,0,date( m ),date( d ) - 10,date( Y )); Notiamo quindi l'utilizzo del comando date all'interno di mktime. 18/57

Lavorare con le stringhe La manipolazione delle stringhe è una cosa molto importante. Per questo motivo abbiamo in PHP una serie di funzioni che ci permettono di velocizzare queste manipolazioni. Vediamo qui di seguito quelle più utilizzare: md5($str) Questo comando restituisce il hash-code della stringa str inserita come parametro. str_replace($trova,$sostituisci,$str[,$conta]) Questo comando cerca la stringa trova all'interno della stringa str sostituendola con sostituisci nel caso in cui la trovasse. Se definito il parametro conta verrà utilizzata come variabile contatore per identificare il numero delle sostituzioni. Esempio: $RISULTATO = str_replace( aa, bb, aaccaa,$conta); echo $RISULTATO. <BR> ; echo $conta; Il risultato sarebbe bbccbb 2 strlen($str) Questo comando restituisce la lunghezza della stringa str. Esempio: echo strlen( ciao ); ha come risultato 4 strpos($str,$trova) Questo comando restituisce la posizione (partendo dalla posizione 0) della stringa str all'interno della stringa trova, oppure false nel caso in qui non dovesse trovare nulla. Siccome il risultato false può essere confuso con la posizione 0 possiamo utilizzare un sistema che ci permette di verificare se il risultato è effettivamente valido, oppure no. Vediamo il semplice esempio: $POS = strpos( Ciao, a ); if($pos === false) { echo Nessuno corrispondenza trovata! ; else{ echo Trovato in posizione: $POS ; 19/57

Notiamo i tre uguali (===) per identificare l'esito del risultato del comando stesso. Il risultato del precedente esempio è: 2 strtoupper($str) Questo comando mette in maiuscolo la stringa fornita. strtolower($str) Questo comando mette in minuscolo la stringa fornita. substr($str,$inizio,[$lun]) Questo comando permette di recuperare una parte di una stringa str fornita come parametro. Il parametro inizio identifica il punto di inizio dell'estrazione dove 0 sta per il primo carattere. Il parametro lun permette di definire il numero di caratteri che vogliamo estrarre. Se il parametro lun viene lasciato via l'estrazione avviene fino alla fine dell'intera stringa. Vediamo alcuni esempi: echo substr( Ciao, come stai,6); ha come risultato: come stai echo substr( Ciao, come stai,0,4); ha come risultato: Ciao Il parametro lun può contenere anche dei valori negativi. In questo caso non definisce il numero dei caratteri ma il numero dei caratteri partendo da destra per stabilire la posizione finale di estrazione. Esempio: echo substr( Ciao, come stai,0,-5); ha come risultato: Ciao, come Anche il parametro inizio può contenere valori negativi. In questo caso identifica la posizione di partenza contando il numero dei caratteri da destra. echo substr( Ciao, come stai,-9,4); ha come risultato: come levenshtein($str1,$str2) Questo comando restituisce un valore intero che rappresenta il numero di lettere che differenzia la prima stringa str1 dalla seconda str2. echo levenshtein( ciao, ciaa ); ha come risultato: 1 20/57

nl2br($str [,$xhtml = true]) Questo comando converte i caratteri di nuova riga (come \n, \r) in tag <br /> oppure <br> in base all'ultimo parametro utilizzato. Con true utilizza <br />, mentre con false <br>. echo nl2br( ciao\nciao ); ha come risultato: ciao<br />ciao str_pad($str [,$lun [,$riempi [,STR_PAD_LEFT STR_PAD_BOTH]]]) Questo comando permette di aggiungere una stringa riempi ad una stringa str tante volte quanto necessario per raggiungere la lunghezza lun. Di default la stringa viene riempita a destra, ma con l'ultimo parametro possiamo decidere se riempire a sinistra (STR_PAD_LEFT) oppure da ambedue i lati (STR_PAD_BOTH). Vediamo i seguenti esempi: echo str_pad( ciao, 10); echo str_pad( ciao, 10, ".-", STR_PAD_LEFT); echo str_pad( ciao, 10, ".-", STR_PAD_BOTH); echo str_pad( ciao, 10, "."); I risultati che otteniamo sono: ciao.-.-.-ciao.-ciao.-.- ciao... str_repeat($str,$per) Questo comando permette di ripetere per volte la stringa str inserita. echo str_repeat( XX,3); ha come risultato: XX XX XX str_split($str [,$num = 1]) Questo comando permette di suddividere la stringa str in blocchi da num elementi. $arr = str_split( abcdef ); ha come risultato: array( a, b, c, d, e, f ) menter $arr = str_split( abcdef,3); ha come risultato: array( abc, def ) 21/57

strip_tags($str [,$tags]) Questo comando permette di pulire la stringa str da tutti i tag presenti all'interno di essa. Con il parametro aggiuntivo tags è possibile definire quali tag vogliamo mantenere all'interno della struttura fornita. echo strip_tags( <b>ciao</b> a <u>tutti</u>! ); ha come risultato: ciao a tutti! mentre echo strip_tags( <b>ciao</b> <i>a</i> <u>tutti</u>!, <b><u> ); ha come risultato: ciao a tutti! Lavorare con file/cartelle PHP mette a disposizione una serie di funzioni in grado di gestire file e/o cartelle. In questo caso bisogna ricordarsi di gestire in maniera corretta i permessi della relativa cartella alla quale PHP deve accedere. Vediamo alcune delle funzioni più utilizzate: mkdir($dir [,$mode=0777 [,$ricorsione=false]]) Questa funzione crea la cartella $dir (può contenere anche un intero percorso). Con $mode possiamo definire i permessi della cartella che non potranno però superare i permessi definiti dal sistema stesso (normalmente 0755). In caso di ricorsione attivata la funzione crea l'intero percorso di cartelle e sottocartelle fino ad arrivare all'ultima desiderata. rmdir($dir) Questa funzione cancella la cartella indicata in $dir. La cartella deve essere vuota. Restituisce true se la cancellazione va a buon fine. rename($vecchio,$nuovo) Permette di rinomina (o all'occorrenza spostare) il file $vecchio a $nuovo. Restituisce true se l'operazione va a buon fine. basename($percorso [,$suffisso]) Questa funzione restituisce il nome del file estrapolato dalla stringa $percorso costituita da cartelle, sotto cartelle e file finale. La stringa $suffisso viene tolta dalla parte destra del nome. dirname($percorso) Questa funzione restituisce il percorso estrapolato dalla stringa $percorso 22/57

costituita da cartelle, sotto cartelle e file finale. unlink($file) Permette di cancellare il file definito all'interno del parametro $file. file_exists($file) Restituisce true se il file definito definito all'interno del parametro $file esiste. file_get_contents($url) Restituisce l'intero contenuto del file indicato da $url che può essere un percorso locale, oppure una url, come stringa. file_put_contents($file,$contenuto) Permette di creare il file indicato da $file con il contenuto $contenuto. is_dir($dir) Restituisce true se il file indicato da $dir è una cartella. is_file($file) Restituisce true se il file indicato da $file è un file (e non una cartella). fopen($file,$mode); Questa funzione permette di aprire il file indicato dalla variabile $file in modalità $mode. Le modalità più utilizzate sono: r sola lettura, w sola scrittura, r+ oppure w+ - lettura e scrittura, a per aggiungere del contenuto ad un file già esistente. Questa funzione restituisce un puntatore posizionato sul byte 0 del file in questione. fread($puntatore,$lun); Questa funzione legge a partire dalla posizione del puntatore (inizialmente restituito da fopen) $lun byte posizionando il puntatore alla fine del blocco letto. fwrite($puntatore,$str); Questa funzione scrive $str all'interno del file aperto con fopen in modalità di scrittura a partire dalla posizione del puntatore indicato. fclose($puntatore); Questa funzione rimuove il puntatore dal file indicato dal puntatore. feof($puntatore); Restituisce true se il puntatore indicato si trova alla fine del file. Vediamo un esempio completo: $s = fopen("test.txt","r"); $d = fopen("test2.txt","w"); while(!feof($s)) { $content = fread($s, 8192); fwrite($d,$content); 23/57