I blog di Alessioempoli

Data 13 ottobre 2017

PHP – 1

Per ingrandire il testo, cliccare sul browser

Per ingrandire le foto, cliccarci sopra

PHP

 

 

#  Introduzione a PHP

 

Ogni operazione eseguita sul Web coinvolge un client ed un server. Un client è un dispositivo (ad esempio un browser) che effettua una richiesta ad un server remoto. Il server remoto attraverso un linguaggio di scripting (come per esempio PHP) interpreta la richiesta del client ed invia una risposta (ad esempio una pagina HTML, un oggetto JSON o un XML) al client. A questo punto il client è in grado di interpretare, a sua volta, la risposta ricevuta e fornirla all’utente; nel caso del browser riceverà una pagina HTML che mostrerà all’utente.

 

PHP è un linguaggio per lo scripting server-side, ovvero un linguaggio che risiede in un server in remoto e che in fase di esecuzione interpreta le informazioni ricevute da un client grazie al Web server, le elabora e restituisce un risultato al client che ha formulato la richiesta.

Supponiamo ad esempio di accedere ad una pagina di un sito Web in cui effettuare il login. Dal nostro browser all’interno di una pagina (ad esempio www.nomesito.com/login) inseriremo le nostre credenziali per l’autenticazione. Semplificando il più possibile, le azioni che vengono compiute saranno le seguenti:

 

# il browser effettua una richiesta con le credenziali al server remoto tramite il protocollo HTTP;

# il Web server riceve la richiesta e la interpreta verificando che i dati inviati siano corretti;

# il web server restituisce una risposta al client che potrà essere diversa a seconda del fatto che la risorsa richiesta sia disponibile o meno.

Quello di cui si occupa PHP è appunto elaborare i dati veicolati tramite una richiesta HTTP e fornire un’adeguata risposta al client. Nel nostro caso il linguaggio avrà il compito di verificare che i dati di login siano corretti e restituire una risposta diversa a seconda della validità delle informazioni ricevute; tale meccanismo viene rappresentato dalla figura seguente (fonte).

 

1-48k

 

PHP si differenzia poi dai linguaggi di scripting client side, come per esempio JavaScript, per via del fatto che il sorgente viene eseguito nel server, generando markup HTML da inviare al client; quest’ultimo riceverà i risultati dell’esecuzione di un’applicazione ma il codice eseguito non sarà mai visibile.

 

Storia

PHP nasce nel 1994 dalla tastiera di Rasmus Lerdorf; inizialmente esso veniva presentato come una serie di Common Gateway Interface (CGI) binari scritti in C per tracciare il numero di visite all’interno della suo homepage personale. Da qui il primo nome del PHP: Personal Home Page. In seguito però verrà rinominato in Hypertext Preprocessor.

 

Il progetto venne ripreso successivamente da Rasmus, riscritto e rilasciato integrando alcune funzionalità. A questo punto il linguaggio era diventato abbastanza noto presso la community Open Source, al punto che nel 1998 venne rilasciata la versione 3 che, alla fine dello stesso anno, coprirà circa il 10% dei server presenti in Rete. Nel 2000 verrà rilasciata la versione 4, fino ad arrivare alla prima release della versione corrente (5.x) nel luglio del 2004.

 

Secondo gli ultimi aggiornamenti di w3techs, PHP risulta utilizzato nell’82% dei siti Web a livello mondiale, seguito dall’ASP con solo il 17%. È di gran lunga il linguaggio server-side più usato e deve gran parte del suo successo alla sintassi molto simile al C e alla sua facilità di apprendimento.

 

 

Caratteristiche e vantaggi del PHP

Come detto nel paragrafo precedente, il PHP appartiene alla famiglia dei linguaggi C-Like, ovvero quei linguaggi la cui sintassi è molto simile a quella del C. Vediamo nella seguente tabella alcune differenze e similitudini tra quest’ultimo e PHP, i punti elencati verranno poi approfonditi nel corso delle trattazione.

 

2-143k

 

Il PHP è stato sviluppato principalmente per il Web, questo implica che la maggior parte delle sue caratteristiche sono state implementate in funzione di esso. Il linguaggio, ad esempio, consente di accedere in maniera semplicissima alle richieste HTTP di tipo GET e POST.

 

La specifica HTTP definisce 9 tipi di metodi alcuni dei quali non sono però usati o supportati dal PHP; i più diffusi restano sicuramente i già citati GET e POST. GET è il metodo con cui vengono richieste la maggior parte delle informazioni ad un Web server, tali richieste vengono veicolate tramite query string, cioè la parte di un URL che contiene dei parametri da passare in input ad un’applicazione (ad esempio www.miosito.com/pagina-richiesta?id=123&page=3). Il metodo POST, invece, consente di inviare dati ad un server senza mostrarli in query string, è ad esempio il caso delle form.

 

Un’altra caratteristica importante è l’accesso in lettura/scrittura ai cookie del browser e il supporto alle sessioni sul server. I cookie sono delle righe di testo usate per tenere traccia di informazioni relative ad un sito Web sul client dell’utente. Le sessioni sono utilizzate anch’esse per memorizzare informazioni relative all’utente, ma vengono salvate sul server e non sul client; esse vengono utilizzate, ad esempio, per gestire l’accesso a contenuti riservati da parte di utenti registrati. Questi argomenti verranno trattati in dettaglio nella sezione dedicata ai dati e alla sicurezza.

 

PHP fornisce delle librerie per accedere alla maggior parte dei database (MySQL, Postgres, SQLite..), per interagire con i server Web (Apache..), per manipolare le immagini (GD), per effettuare connessioni remote (cUrl) e molto molto altro, inoltre, anche se nato come linguaggio per Web, potrà essere utilizzato come linguaggio per lo scripting da riga di comando.

 

Uno dei punti di forza del PHP è la community molto attiva. Sono migliaia le librerie di terze parti che ampliano le funzionalità di base e, nella maggior parte dei casi, sono tutte rilasciate con licenza Open Source. Numerosissimi anche i framework sviluppati con questo linguaggio (Zend Framework, Symfony Framework, CakePHP..) così come anche i CMS (WordPress, Drupal, Joomla..).

 

PHP è multipiattaforma, cioè può essere utilizzato sia in ambienti unix-based (Linux, Mac OSX) che su Windows. La combinazione più utilizzata, però, resta quella LAMP ovvero Linux come sistema operativo, Apache come Web server, MySQL per i database e PHP.

 

 Perché imparare PHP

Perché è importante conoscere il PHP? Perché è il linguaggio di scripting lato server più utilizzato al Mondo e la richiesta di sviluppatori dotati di questa competenza è ancora in crescita, perché la curva di apprendimento rispetto ad altri linguaggi è molto meno ripida e sarà possibile divenire operativi in tempi più brevi, infine, fattore non secondario, perché PHP è Open Source.

 

 

# Impostare l’ambiente di lavoro

 

Per sviluppare in PHP non sono necessari  molti strumenti, il set up della macchina è piuttosto veloce e si è operativi in breve tempo. Vediamo di quali soluzioni abbiamo bisogno:

 

un server Web;

PHP;

– un editor di testo;

– un browser per la navigazione Internet;

– un gestore di database per l’eventuale interazione con i dati.

 

Server Web e PHP

La scelta del server Web dipende innanzitutto dal sistema operativo su cui si sta lavorando. Nonostante sia preferibile che i nostri script girino su un server Linux, possiamo tranquillamente progettarli sulla nostra macchina, indipendentemente dal sistema operativo installato.

Un server Web non è fondamentale per creare uno script PHP dato che il linguaggio può essere eseguito anche da riga di comando. Diventa però necessario per realizzare script che operino sul Web dato che abbiamo la necessità di uno strumento che riceva le richieste HTTP e invii le risposte al client.

 

Alcuni dei server Web più diffusi sono al momento Apache ed nginx. Apache resta sicuramente il più utilizzato a livello mondiale, la maggior parte delle guide online sono appunto dedicate a questo server Web, ma nginx sta prendendo sempre più piede grazie all’elevato livello di prestazioni che è in grado di garantire. Quest’ultimo infatti è più leggero e veloce di Apache ma, dato che dovremo lavorare sulla nostra macchina e non su un server Web reale, possiamo tranquillamente scegliere uno dei due.

 

Vedremo  come installare Apache, PHP e anche un Database Manager System MySQL sulla nostra macchina.

 

 

Software per l’installazione automatica dell’ambiente di sviluppo

Nel caso in cui non sussistano esigenze particolari, sono presenti in Rete anche numerosi PHP development environment che installano e configurano automaticamente i software ed i servizi di cui abbiamo bisogno; Alcuni sono cross-platform, quindi disponibili per ogni sistema operativo, altri sono specifici per una piattaforma. E’ possibile proporne alcuni, includendo i sistemi operativi supportati:

 

3-42k

 

AMPPS è un software che consente di installare automaticamente Apache, MySQL, PHP, il linguaggio Python e Softaculous (una script library che automatizza l’installazione di Web applications in un sito Internet). Ha un’ottima interfaccia di amministrazione che consente ai neofiti di installare anche i principali framework e CMS (Content Management System, o “sistemi per la gestione dei contenuti”) come per esempio WordPress, Joomla, Symfony ecc., occupandosi anche di farci scegliere per ognuno di essi le credenziali di accesso all’area admin e al database. È una soluzione cross-platform, quindi installabile indipendentemente dal sistema operativo corrente.

 

WAMP è un development tool per Windows che installa e configura per noi Apache, MySQL e PHP. Utile l’interfaccia sulla barra vicino all’orologio di sistema con cui è possibile cambiare la versione dei vari software o abilitare/disabilitare le singole estensioni di Apache e PHP.

 

XAMPP installa su tutti i sistemi operativi Apache, MySQL, PHP e Python, attraverso il Package management system Bitnami consente, come AMPPS, di installare sulla nostra macchina i principali CMS con qualche click.

 

MAMP è nato per piattaforme Apple, in seguito però è stata rilasciata anche una versione per Windows. Contiene al suo interno Apache, MySQL, PHP, Python e il linguaggio PERL.

 

 

Installare il server Web integrato di PHP

 

Un’ultima possibilità nel caso non si volesse installare un Web server esterno, è quella di utilizzare il Web server integrato di PHP.

 

Nel caso si stia utilizzando un sistema operativo della Apple sarà già tutto installato di default e non di dovrà fare nulla, nel caso in cui fossimo su piattaforma Windows dovremo scaricare i binari dal sito del PHP, infine, nel caso di un sistema operativo basato sul Kernel Linux come per esempio Ubuntu, saranno sufficienti le tre istruzioni seguenti lanciate dalla command line:

 

4-58k

 

Tramite il parametro t possiamo indicare la document root, ovvero la cartella da cui leggere i file, possiamo anche personalizzare la porta in ascolto, semplicemente modificando il valore “8000” sostituendolo con un altro.

 

Creiamo quindi un file index.html con del testo di prova all’interno della cartella e apriamo il nostro browser all’indirizzo http://localhost:8000/. Visualizzeremo a questo punto il contenuto del file appena creato.

 

 

Gli Editor di testo

 

Per scrivere il codice dei nostri script non abbiamo bisogno di particolari software ma è sufficiente un qualsiasi editor di testo. È preferibile però utilizzare un editor che supporti l’indentazione e la colorazione del codice, in maniera rendere più leggibili i sorgenti.

 

Tra gli editor di testo più noti abbiamo:

 

Notepad++ per Windows (free);

PsPad per Windows (free);

Sublime per Windows, Linux e Mac (free);

Atom per Windows, Linux e Mac (free);

Dreamweaver per Windows e Mac (premium);

Coda per Mac (premium);

VIM per Linux, Windows e Mac (free).

 

Notepad++ e PsPad sono stati probabilmente i più famosi editor per Windows. Entrambi consentono di installare plugin che aggiungono funzionalità e supporto ai vari linguaggi di programmazione.

 

Sublime è un editor multipiattaforma che sta riscuotendo sempre più successo. I suoi punti di forza sono le prestazioni e un Package Manager che consente di personalizzare ampiamente sia le funzionalità che l’aspetto grafico del software.

 

Atom è un software realizzato dai creatori del servizio per il code hosting GitHub che riprende molte delle feature di Sublime. È customizzabile in ogni sua forma ed in continua evoluzione. Attualmente, però, non supporta file di dimensioni maggiori ai 2MB.

 

Dreamweaver è l’editor di casa Adobe. Probabilmente uno degli editor premium più famosi e utilizzati di sempre.

 

Coda è un software per Mac molto potente. Uno dei suoi punti di forza è la possibilità di connettersi automaticamente in FTP o in SSH al server, oppure di eseguire direttamente query SQL sul nostro database.

 

VIM è una versione più potente e con interfaccia grafica del famosissimo editor VI distribuito nella quasi totalità dei sistemi UNIX. Anch’esso è multipiattaforma ed è consigliatissimo per chi desidera sviluppare con le combinazioni da tastiera; un po’ meno per chi è alle prime armi.

 

 

Gli IDE

Nel caso in cui siano necessari strumenti più avanzati come l’autocompletamento del codice, si potrebbe preferire un IDE al semplice editor di testo. Gli IDE (Integrated Development Environment) sono software che aiutano i programmatori a sviluppare codice attraverso l’autocompletamento delle funzioni, dei metodi delle classi, tramite la colorazione del codice o la segnalazione di errori di sintassi senza dover eseguire il codice per individuarli.

 

Alcuni degli IDE più noti sono i seguenti, tutti multipiattaforma:

 

PHPStorm (premium);

NetBeans (free);

Eclipse (free);

Aptana Studio (free);

Zend Studio (premium).

 

PHPStorm è uno degli IDE più completi attualmente sul mercato. Nonostante il suo nome possa trarre in inganno, non supporta solo PHP ma vari linguaggi. Gli strumenti messi a disposizione sono davvero tantissimi così come le estensioni rilasciate dalla community.

 

NetBeans e Eclipse nascono come IDE per sviluppare Java ma, grazie alla community rilasciano dei pacchetti che supportano PHP.

 

Aptana Studio è un altro IDE orientato allo sviluppo Web, basato su Eclipse, fornisce un’interessante set di strumenti che semplificano la vita dello sviluppatore.

 

Zend Studio è un ambiente di sviluppo anch’esso molto potente rilasciato da Zend, la software house che più ha contribuito negli anni al successo del PHP e che ha sviluppato Zend Framework.

 

 

# Impostare un ambiente PHP su Linux

abbiamo visto che per iniziare a sviluppare in PHP abbiamo bisogno di un Web server, di PHP e di un DBMS (Database Management System) installati sulla nostra macchina. Vediamo, quindi, come installare questi strumenti su una postazione Linux con distribuzione Debian-based, creando quello che viene chiamato un ambiente LAMP (Linux, Apache, MySQL e PHP).

 

Installare il Web server

utilizzeremo come Web server Apache. Per prima cosa apriamo il nostro terminale e aggiorniamo i pacchetti sulla nostra macchina:

 

5-43k

 

Una volta che avremo scaricato e installato Apache, aprendo il nostro browser Internet alla pagina raggiungibile tramite l’URL http://127.0.0.1 dovremmo visualizzare un messaggio di benvenuto previsto di default dal Web server. La pagina indica che tutto è andato a buon fine e che all’interno della directory /var/www/html/ possiamo iniziare ad inserire pagine html che saranno interpretate dal programma per la navigazione.

 

Se infatti creiamo un file, chiamato ad esempio test.html, e lo richiamiamo all’indirizzo http://127.0.0.1/test.html, visualizzeremo il contenuto del nostro file. Questa cartella sarà quella che, una volta installato PHP, conterrà anche i nostri script.

 

La directory in cui salveremo i file PHP, così come il nome del dominio a cui far puntare i nostri script e molte altre impostazioni possono essere configurate attraverso il VirtualHost di Apache. A questo scopo possiamo far riferimento alla documentazione ufficiale per scoprire come configurare e personalizzare il nostro Web server.

Ricordiamoci che, quando modifichiamo le impostazioni di Apache dobbiamo riavviare il servizio relativo attraverso il comando:

 

sudo service apache2 restart

 

 

Installare MySQL

 

Prima di installare PHP, installiamo il nostro DBMS MySQL per avere a disposizione anche un database relazionale. Torniamo sulla console e digitiamo:

sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql

 

Dopo aver scaricato circa 100 MB di pacchetti, comparirà una schermata in cui dovremo scegliere la password per l’utente “root” di MySQL. Scegliamo una password e premiamo il tasto [Invio] sulla tastiera. Ci verrà richiesto di ridigitarla, dopodiché facciamo continuare l’installazione dei pacchetti.

 

Al termine dell’installazione digitiamo sulla nostra console:

mysql -u root -p

 

Una volta inserita la password richiesta in precedenza si aprirà la console di MySQL con cui in seguito potremo creare database e tabelle per le nostre applicazioni. Digitiamo quindi exit per uscire dalla console.

 

 

Installare PHP

 

Ora che il Web server e l’engine MySQL sono installati e configurati correttamente, possiamo installare PHP per far girare i nostri script. Sempre dalla console digitiamo:

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

Al termine dell’installazione, come di consueto, verifichiamo che l’esito sia stato positivo. Digitiamo quindi nella console:

php -v

 

Se tutto dovesse essere andato a buon fine dovremmo visualizzare qualcosa di simile al seguente messaggio:

 

6-78k

 

Salviamo il file e dirigiamo il nostro browser alla pagina http://127.0.0.1/file.php. Se non abbiamo commesso errori, dovremmo visualizzare la stringa ciao sullo schermo.

Abbiamo visto in questa lezione come, con pochissimi comandi da terminale, sia possibile configurare la nostra macchina basata su un sistema operativo Linux. Nella prossima lezione vedremo invece come eseguire le medesime operazioni su una macchina equipaggiata con Mac OSX.

 

 

# Impostare un ambiente PHP su Mac

 

Abbiamo visto come iniziare a sviluppare in PHP su una macchina Linux. Vediamo, invece, come impostare l’ambiente di lavoro nel caso in cui la nostra postazione sia un Mac con sistema operativo OSX Yosemite.

 

Abilitare il Web Server

A differenza dei sistemi Linux e Windows, su Mac abbiamo già installati sia PHP che Apache. Per quanto riguarda il Web Server, non dobbiamo fare altro che abilitarlo. Prima di procedere, apriamo il terminale e lanciamo il comando:

sudo su –

così da eseguire tutte le prossime istruzioni con privilegi di amministratore. A questo punto digitiamo nella nostra console:

apachectl start

 

 

Verifichiamo che tutto sia andato a buon fine aprendo nel nostro browser la pagina corrispondente all’indirizzo http://127.0.0.1. Dovremmo quindi visualizzare un messaggio di benvenuto con scritto It works!.

 

 

Abilitare PHP per Apache

 

Una volta che Apache è stato avviato, bisognerà modificare il suo file di configurazione (presente sul percorso /etc/apache2/httpd.conf) per abilitare il supporto a PHP. Come prima operazione effettuiamo una copia di backup della configurazione attuale:

 

cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf.bak

 

Apriamo ora il file con un editor e decommentiamo (ovvero rimuoviamo il carattere #) dalla riga in cui è presente la direttiva:

LoadModule php5_module libexec/apache2/libphp5.so

 

A questo punto riavviamo Apache con il comando:

apachectl restart

 

e verifichiamo che tutto funzioni correttamente creando un file PHP nella nostra DocumentRoot. Di default quest’ultima si trova sul percorso /Library/WebServer/Documents. Creiamo al suo interno un file denominato test.php con il seguente contenuto:

 

<h1><?php echo “Ciao”; ?></h1>

 

 

Dirigiamo ora il nostro browser all’indirizzo http://127.0.0.1/test.php e, se tutto è andato correttamente, visualizzeremo la stringa “Ciao” delimitata da un tag h1.

 

Prima di procedere oltre abilitiamo anche alcuni moduli di Apache che potrebbero esserci utili in futuro. Riapriamo il file di configurazione e decommentiamo le seguenti righe:

 

7-92k

 

Installare MySQL

L’ultimo passaggio per avere una macchina correttamente configurata consiste nell’installare il DBMS MySQL. Scarichiamo il pacchetto DMG dal sito ufficiale del progetto ed eseguiamolo. L’installazione è molto semplice, non richiede configurazioni ed è sufficiente andare sempre avanti nei vari step.

Infine, avviamo il servizio dalle impostazioni del nostro Mac come in Figura,per abilitare il servizio MySQL:

 

8-60k

 

Verifichiamo che funzioni correttamente aprendo la shell con il comando:

 

./usr/local/mysql/bin/mysql

 

 

# Impostare un ambiente PHP su Windows

 

 

Nelle ultime due lezioni ci siamo occupati di configurare un ambiante PHP su Linux e Mac. Vediamo ora come configurare la nostra macchina nel caso in cui si lavori su sistema operativo Microsoft Windows.

 

 

Installare il Web Server

Come prima operazione abbiamo la necessità di scaricare Apache, il Web Server di riferimento per questa lezione. Nativamente Apache non rilascia binari installabili per Windows ma alcuni progetti esterni ci consentono di effettuarne il download. Rechiamoci quindi sul sito Web Apache Lounge e scarichiamo i binari più adatti all’architettura del nostro sistema – 32bit o 64bit.

 

Una volta scaricato l’archivio compresso scompattiamolo e spostiamo la cartella Apache24 dentro la directory C:\. Avviamo a questo punto il terminale come amministratore. Per fare ciò sarà sufficiente cliccare con il tasto destro del mouse sull’icona del “Prompt dei Comandi” e cliccare su “Esegui come amministratore”. Ora digitiamo all’interno della console:

cd\Apache24

 

 

così da accedere alla directory appena scompattata. Digitiamo poi:

cd bin

httpd -k install

 

 

A questo punto partirà l’installer per integrare Apache come servizio. Se il firewall di Windows è attivato verrà richiesto di aprire l’accesso al programma, si dovrà quindi acconsentire a tale richiesta per visualizzare sulla shell un messaggio simile al seguente:

 

9-57k

 

Lanciamo l’eseguibile ApacheMonitor.exe, che si trova all’interno della cartella C:\Apache24\bin\, e vedremo una nuova icona nella barra delle notifiche vicino all’orologio di Windows. Cliccando su quest’ultima con il tasto destro del mouse e selezionando la voce “Open Apache Monitor” visualizzeremo una finestra simile a quella rappresentata in Figura 2 da cui attivare Apache cliccando su “Start”.

 

10-64k

 

Attraverso l’Apache Monitor si potrà avviare, spegnere o riavviare i servizi di Apache.

Verifichiamo che l’installazione sia andata a buon fine aprendo il browser alla pagina http://localhost, dovremmo visualizzare una stringa It works!.

 

La DocumentRoot di default è disponibile all’interno della directory C:\Apache24\htdocs. I file di configurazione di Apache, invece, sono disponibili all’interno della cartella C:\Apache24\conf

 

 

Installare PHP

Una volta che il Web Server è funzionante si dovrà installare PHP, rechiamoci quindi nell’apposita sezione Downloads del sito ufficiale e clicchiamo su “Windows Downloads”, scegliamo poi l’archivio Zip dalla sezione VC11 x86 Thread Safe o VC11 x64 Thread Safe a seconda dell’architettura di riferimento.

 

Scompattiamo il pacchetto all’interno della directory C:\php e apriamo la cartella così prodotta. All’interno sono presenti due file di configurazione: php.ini-development e php.ini-production. Copiamo il primo e rinominiamolo in php.ini. Dato che lavoreremo in locale, è consigliabile usare un file di configurazione di sviluppo che ci aiuta a fare debug degli errori. Apriamo a questo punto il file appena rinominato con un editor di testo e cerchiamo la stringa extension_dir che di default dovrebbe essere commentata, ovvero preceduta da un punto e virgola; decommentiamola rimuovendo quest’ultimo e salviamo il file.

 

Dovremo ora impostare la cartella che conterrà l’eseguibile del PHP come variabile d’ambiente. Clicchiamo con il tasto destro sull’icona del “Computer” e selezioniamo la voce “Proprietà”. Sulla finestra che si apre, clicchiamo sull’ultima voce a sinistra (“Impostazioni avanzate”), apriamo la tabAvanzate” e selezioniamo “Variabili d’ambiente”. Dalla sezione “Variabili di sistema” facciamo doppio click su “Path” come in Figura 3

 

11-72k

 

Aggiungiamo quindi alla fine della stringa i valori ;C:\php e prestiamo attenzione al punto e virgola iniziale che serve a separare le stringhe. Clicchiamo su “OK” e chiudiamo. Ora potremo installare PHP come modulo di Apache in maniera da interpretare i file “.php” all’interno del nostro Web Server.

Apriamo con un editor di testo il file C:\Apache24\conf\httpd.conf e cerchiamo la sezione dei LoadModule. Posizioniamoci al termine della lista e aggiungiamo le seguenti righe:

 

LoadModule php5_module “c:/php/php5apache2_4.dll”

AddType application/x-httpd-php .php

PHPIniDir “C:/php”

 

Salviamo il file e riapriamo di nuovo l’Apache Monitor. Clicchiamo su “Restart” per riavviare Apache dopo le modifiche alla configurazione. A questo punto saremo in grado di eseguire i file “.php” presenti nel nostro progetto. Creiamo un file test.php nella DocumentRoot e scriviamo al suo interno:

 

<h1><?php echo “Ciao”; ?></h1>

 

 

Dirigiamo ora il nostro browser all’indirizzo http://127.0.0.1/test.php e, se tutto è andato per il meglio, visualizzeremo la stringa “Ciao” delimitata da un tag h1.

 

 

Installare MySQL

L’ultimo step rimasto consiste nell’installare il Database manager MySQL sul nostro sistema. Scarichiamo innanzitutto il pacchetto da installare dal sito ufficiale del progetto. Anche in questo caso scegliamo il pacchetto compatibile con la nostra architettura.

Una volta completato il download scompattiamo l’archivio compresso scaricato e lanciamo l’installer. Ci verrà chiesto di accettare la licenza e poi di connetterci ad Internet per scaricare gli ultimi pacchetti aggiornati; selezioniamo “Connect to internet” quando richiesto e poi andiamo avanti. Scegliamo l’installazione “Full”, definiamo C:\MySQL come “Installation Path” e C:\MySQL\data come Data Path per andare poi avanti.

 

Dopo la selezione di eventuali pacchetti aggiuntivi, proseguendo partirà il download e l’installazione di diversi prodotti, una volta completato quest’ultimo potremo configurare il nostro server MySQL. Impostiamo quindi il tipo di configurazione come in Figura 4 e scegliamo “Server Machine” per ottimizzare le risorse disponibili e migliorare le prestazioni.

 

12-75k

 

Procediamo ed impostiamo una password di root nel caso volessimo utilizzarla, poi selezioniamo “Avanti” fino al termine dell’installazione. Ora che abbiamo installato MySQL dobbiamo renderlo visibile al nostro PHP. Apriamo il file php.ini creato in precedenza e scrolliamo fino alla sezione con le extension. Decommentiamo le righe relative a:

 

 

 

extension=php_mbstring.dll

extension=php_mysql.dll

extension=php_mysqli.dll

extension=php_pdo_mysql.dll

 

Riavviamo nuovamente Apache ed avremo completato la configurazione della nostra macchina. Nel caso specifico dell’esempio riportato la configurazione di riferimento è stata composta da Windows 7, Apache 2.4.12 Win64, PHP 5.6.9 e MySQL 5.6.24

 

# Impostare un ambiente PHP su Windows con WAMP

 

In precedenza abbiamo affrontato la procedura necessaria per installare separatamente Apache, PHP e MySQL su un ambiente Windows. Nel caso in cui non volessimo installare tutti i software separatamente e dedicare tempo a configurare ciascuno di essi manualmente, potremmo utilizzare un PHP development environment che, tramite pochissimi click, installa un ambiente già configurato e pronto all’uso.

 

Di applicazioni “all in one” abbiamo già parlato nel punto dedicato ad impostare l’ambiente di lavoro ed abbiamo visto che tra le soluzioni più diffuse per Windows abbiamo WAMP, XAMPP e AMPPS.

 

In questa lezione approfondiremo l’installazione di uno di questi software, in particolare vedremo in dettaglio come impostare un ambiente PHP con Wamp Server.

 

Installazione di Wamp Server

 

Il primo step per la creazione di un ambiente basato su Wamp sarà ovviamente quello di scaricare il file di installazione dalla sezione download del sito ufficiale del progetto. Nel package della release attualmente disponibile, la 2.5, sono presenti Apache 2.4.9, MySQL 5.6.17, PHP 5.5.12, l’interfaccia visuale per l’interazione con il DBMS denominata PHPMyAdmin in versione 4.1.14, SqlBuddy 1.3.3 (soluzione Web based per l’amministrazione di database MySQL) e XDebug 2.2.5 per il debugging e l’analisi degli script PHP

 

Scegliamo la versione più appropriata in base all’architettura del nostro sistema operativo (a 32 o 64 bit) e, una volta completato il download, lanciamo l’installazione.

 

13-84k

 

Fatto questo, ci verrà chiesto di accettare la licenza d’uso del software e di scegliere la cartella in cui installarlo. Andando avanti l’installer ci richiederà il path (percorso) del browser di default, come indicato nell’immagine seguente.

 

14-96k

 

Per effettuare tale operazione basterà selezionare l’eseguibile del browser che utilizziamo quotidianamente e procedere con il passaggio successivo. A questo punto sarà sufficiente aprire le porte sul Firewall di Windows e, come ultimo step, configurare i parametri per la funzione mail() di PHP. Se non abbiamo esigenze particolari possiamo lasciare i valori di default già impostati.

 

Pannello di WampServer

Una volta che l’installazione sarà completata, nella barra delle notifiche apparirà una nuova icona posizionata vicino all’orologio di sistema. Il colore dell’iconcina indica lo stato del server: verdetutto ok”, i servizi necessari sono operativi, giallo in fase di avvio dei servizi e infine rosso nel caso in cui qualche servizio non sia stato attivato correttamente.

 

15-135k

 

Attraverso il pannellino rappresentato in figura 4 abbiamo il pieno controllo del nostro ambiente di sviluppo. Di seguito un breve elenco riportante alcune delle operazioni che possiamo compiere tramite tale pannello:

 

aprire il browser direttamente all’indirizzo del localhost, dove verranno eseguiti gli script PHP;

aprire la cartella in cui inserire i nostri script PHP;

attivare e disattivare le diverse estensioni per Apache, PHP e MySQL;

avviare, arrestare o riavviare tutti i servizi lanciati da Wamp.

 

E’ bene tenere presente che in alcuni casi potrebbero verificarsi dei conflitti sulla porta 80, malfunzionamenti dovuti per esempio a Skype o altre applicazioni per la messaggistica istantanea che utilizzano questa stessa porta in attesa di richieste. Nel caso in cui non riuscissimo ad avere tutti i servizi funzionanti possiamo andare nelle opzioni avanzate di Skype e disabilitare l’opzioneUsa le porte 80 e 443 come alternative per le connessioni in entrata”.

 

Il primo script PHP

In precedenza ci siamo occupati di scegliere un editor e di configurare l’ambiente di lavoro per poter incominciare a sviluppare i nostri primi script in PHP. Iniziamo, infatti, in questa lezione ad analizzare le principali caratteristiche sintattiche del linguaggio di scripting.

 

16-81k

Il codice proposto in precedenza rappresenta un comune script in PHP.

 

Tag di apertura e chiusura

 

Possiamo notare come la prima riga dello script introdotto nel paragrafo precedente contenga il tag di apertura del linguaggio <?php, mentre l’ultima il tag di chiusura ?>. L’interprete PHP, infatti, esegue solo il codice che è contenuto all’interno di questi due delimitatori. Questo ci consente, come vedremo , di inserire del codice PHP all’interno di una normale pagina HTML così da renderla dinamica.

 

Configurando opportunamente il file php.ini è possibile utilizzare altre sintassi per determinare i tag di apertura e chiusura. Ad esempio potremmo usare i tag brevi <? … ?> oppure i tag in stile ASP <% … %>.

 

Anche se abbiamo la possibilità di utilizzare queste notazioni, è fortemente sconsigliato farne uso dato che questi tag alternativi limitano e riducono la portabilità del nostro codice.

 

Commenti

PHP supporta tre tipologie di commenti, come possiamo vedere nell’esempio. La prima consente di avere un commento su più righe (multilinea) e consiste nel racchiudere il testo del commento tra /* … */. Tutto quello che è delimitato dai due tag non verrà interpretato dal PHP.

 

Le altre due modalità sono simili e consentono di inserire commenti su una singola riga attraverso l’utilizzo di //, doppio slash, o del carattere cancelletto, #. Ovviamente il commento non deve trovarsi per forza all’inizio della riga ma anche dopo una qualsiasi istruzione PHP. Ad esempio:

echo “Ciao”; // stampo la parola Ciao

 

Le variabili

In seguito tratteremo in maniera più approfondita le variabili in PHP. Per ora è sufficiente sapere che tutte le variabili sono delimitate dal carattere $. Subito dopo i commenti, quindi, assegniamo alla variabile $nome il valore “Simone” e lo stampiamo a video attraverso il costrutto echo. Nella riga in cui stampiamo il nostro nome possiamo notare l’utilizzo del carattere . che nel PHP consente di concatenare due o più stringhe.

 

Le funzioni in PHP

Contrariamente a molti linguaggi di programmazione, in primis C e Java, PHP non richiede né la dichiarazione del tipo di dato restituito da una funzione, né il tipo dei parametri passati. Come vedremo più avanti, non abbiamo limiti nemmeno nel numero dei parametri passati.

 

Una funzione viene dichiarata con la keyword function, seguita dal nome della funzione e, tra parentesi tonde, dal nome dei parametri necessari alla funzione. Il codice della funzione è delimitato da due parentesi graffe { … }.

 

La funzione che abbiamo visto nell’esempio ad inizio pagina si chiamerà stampa_nome e prenderà in ingresso un parametro chiamato $nome. Al suo interno stampiamo la stringa Ciao $nome con il nome contenuto all’interno di un tag HTML <strong>. Questo perché possiamo generare anche codice HTML dinamico all’interno del PHP e stamparlo nella pagina. Ci occuperemo nel dettaglio di questo aspetto nella prossima lezione.

 

Una volta dichiarata la funzione, possiamo eseguirla in qualsiasi momento semplicemente scrivendone il suo nome seguito da due parentesi tonde (). Nel caso in cui la funzione accetti dei parametri, potremo passarne i valori all’interno delle parentesi tonde. Nel nostro caso la funzione accetta in ingresso un nome, quindi la richiameremo in questa maniera:

stampa_nome($nome);

 

Nel nostro caso la nostra funzione non ritorna nulla; nel caso in cui, invece, dovesse ritornare qualcosa, si utilizza la keyword return. Ad esempio, supponiamo di voler scrivere una funzione che sommi due parametri e restituisca il risultato, il codice PHP necessario sarà:

 

17-44k

 

PHP e HTML

 

PHP nasce come linguaggio di scripting per il Web. Caratteristica che ci permette di modificare il codice HTML di una pagina e di modificarne il comportamento e quindi l’output, in base alle nostre esigenze.

 

Come abbiamo osservato nel corso delle lezioni precedenti, quando il Web server riceve una richiesta per una pagina PHP, essa viene analizzata dall’interprete del linguaggio, il quale restituisce un file contenente solo il codice che deve essere inviato al browser. In particolare l’interprete elabora unicamente il sorgente contenuto all’interno dei tag <?php ?>.

 

Questo ci dà la possibilità di inserire del codice PHP all’interno di una pagina contenente codice HTML (embedding) e quindi di rendere le nostre pagine Web dinamiche. A tal proposito si analizzi un semplice esempio:

 

18-69k

 

Come è possibile notare, nell’esempio proposto il codice contenuto all’interno dei tag delimitatori di PHP viene interpretato e, di conseguenza, viene stampato soltanto l’output che noi abbiamo stabilito in sede di stesura del sorgente. In particolare all’interno del body abbiamo utilizzato la funzione date () per stampare dinamicamente la data e l’ora del momento esatto in cui viene caricata la pagina.

 

Formattazione della pagina HTML

Nella maggior parte dei linguaggi di programmazione e di scripting il carattere \n sta ad indicare un ritorno a capo. Anche nel PHP il comportamento è lo stesso, ma bisogna prestare attenzione anche al comportamento dell’HTML. Il codice:

 

<?php echo “Ciao Simone,\n come stai?”; ?>

 

verrà infatti visualizzato su una sola riga nonostante il \n. visualizziamo il sorgente della pagina, invece, il testo risulterà disposto su due righe. Nell’HTML il tag corretto per forzare un ritorno a capo è <br /> e non è sufficiente scrivere del testo su un’altra riga. Per avere un funzionamento corretto (e cioè identico a quello atteso), abbiamo quindi bisogno di scrivere:

 

<?php echo “Ciao Simone,<br /> come stai?”; ?>

 

L’importanza dell’utilizzo del carattere \n non è però da trascurare. Quando non si ha a che fare con l’HTML, il suo funzionamento torna ad essere quello aspettato. Basti pensare ai casi in cui si utilizza il PHP per scrivere su un file o per il testo di una messaggio di posta elettronica. Anche all’interno del codice HTML esso ha però la sua importanza.

 

Se abbiamo bisogno di produrre un consistente quantitativo di markup HTML attraverso il codice PHP, può essere utile formattarlo in modo di aumentarne la leggibilità. Vediamo un esempio:

 

<?php echo “<ul>\n<li>list item 1</li>\n<li>list item 2</li>\n</ul>\n”; ?>

 

Il codice appena visto stamperà tramite il Web browser un codice HTML come il seguente:

 

 

<ul>

<li>list item 1</li>

<li>list item 2</li>

</ul>

 

Esso risulta sicuramente molto più leggibile di quanto non potrebbe esserlo nel caso in cui tutto il codice fosse disposto su un’unica riga. Possiamo però migliorarlo ancora: il carattere \t inserisce all’interno di una pagina una tabulazione. Inserendo il carattere all’interno dell’esempio appena visto possiamo incrementare ulteriormente la leggibilità del codice HTML. L’esempio:

 

<?php echo “<ul>\n\t<li>list item 1</li>\n\t<li>list item 2</li>\n</ul>\n”; ?>

produrrà il seguente codice HTML:

 

19-44k

 

Abbiamo visto come produrre pagine HTML dinamiche utilizzando PHP. Possiamo ora entrare nel dettaglio delle basi del linguaggio analizzando i tipi di dato supportati.

 

Tipi di dati in PHP

 

PHP non è un linguaggio fortemente tipizzato, questa particolarità ci consente di assegnare alla stessa variabile più tipi di dato all’interno della stessa esecuzione del codice. Il tipo di dato, quindi, è associato al valore e non alla variabile. Sulla base di quanto detto, vediamo insieme quali sono i dati di dato supportati dal PHP.

 

Boolean – valori booleani (vero, falso)

 

Il tipo di dato boolean serve a rappresentare i valori “vero” o “falso” all’interno di espressioni logiche.

 

20-75k

 

Float o double – numeri in virgola mobile

 

I valori con cifre decimali sono rappresentati mediante l’utilizzo del . e non della , come nel nostro sistema. Anche il loro intervallo dipende dall’architettura di riferimento ma mediamente vengono supportate fino a circa 14 cifre dopo la virgola. Bisogna prestare attenzione a non usare questo tipo di dato per valori precisi, come nel caso in cui si ha a che fare con valute. In quel caso bisognerebbe utilizzare invece le funzioni di BCMath.

 

21-40k

 

String – testi o stringhe di caratteri

Una stringa è un insieme di caratteri. Contrariamente a quanto accade in linguaggi come il C, in PHP non è necessario definire la dimensione massima della stringa ma in ogni momento si può modificare il contenuto senza prima verificare se la variabile può contenere una determinata stringa. Una stringa può essere delimitata dal carattere ‘ (apice singolo) o dal carattere ” (doppio apice). Il delimitatore utilizzato per determinare l’inizio di una stringa deve essere utilizzato anche per indicarne il suo termine.

 

22-74k

 

Come è possibile notare, il backslash deve essere utilizzato come carattere di escape quando si vuole includere nella stringa lo stesso tipo di carattere che la delimita; se mettiamo un backslash davanti ad un apice doppio in una stringa delimitata da apici singoli (o viceversa), anche il backslash entrerà a far parte della stringa stessa. Il backslash viene usato anche come “escape di sé stesso” nei casi in cui si desideri includerlo esplicitamente in una stringa.

 

23-88k

 

Attraverso il carattere . (operatore di concatenazione) è poi possibile concatenare più stringhe:

 

24-38k

 

La notazione heredoc, poco utilizzata se non in situazioni nelle quali è necessario specificare stringhe molto lunghe, consente di delimitare una stringa con i caratteri <<< seguiti da un identificatore; a questo scopo in genere si usa EOD, ma è solo una convenzione, è possibile utilizzare qualsiasi stringa composta di caratteri alfanumerici e underscore, di cui il primo carattere deve essere non numerico (la stessa regola dei nomi di variabile). Tutto ciò che segue questo delimitatore viene considerato parte della stringa, fino a quando non viene ripetuto l’identificatore seguito da un punto e virgola. Attenzione: l’identificatore di chiusura deve occupare una riga a sé stante, deve iniziare a colonna 1 e non deve contenere nessun altro carattere (nemmeno spazi vuoti) dopo il punto e virgola.

 

25-66k

 

Il codice proposto stamperà la stringa “Il mio nome è Simone” Infatti la sintassi heredoc risolve i nomi di variabile così come le virgolette. Rispetto a queste ultime, con tale sintassi abbiamo il vantaggio di poter includere delle virgolette nella stringa senza farne l’escape:

 

Array

 

Un array (o vettore) può essere considerato come una matrice matematica. In PHP esso rappresenta una variabile complessa che restituisce una mappa ordinata basata sull’associazione di coppie chiave -> valore. La chiave di un array può essere un numero o di tipo stringa, mentre il valore può contenere ogni tipo di dato, compreso un nuovo array. Approfondiremo gli array più avanti nella sezione ad essi dedicata.

 

26-43k

 

Le variabili in PHP

 

Le variabili sono uno degli strumenti fondamentali di ogni linguaggio di programmazione. Una variabile è una porzione di memoria in cui viene memorizzato un dato che può variare durante l’esecuzione del programma.

 

Come abbiamo visto nella lezione precedente, PHP non è un linguaggio fortemente tipizzato. A differenza di linguaggi come il C o il Java in cui bisogna dichiarare il tipo di dato che conterrà una determinata variabile, in PHP possiamo assegnare alla stessa variabile diversi tipi di dato durante l’esecuzione dello script.

 

Un’altra differenza sostanziale è che la variabile non deve essere necessariamente dichiarata prima del suo utilizzo. Questo consente, quindi, di creare variabili al volo nel momento in cui ne abbiamo bisogno.

Le variabili in PHP sono delimitate dal carattere $, seguito da un carattere alfabetico o da un underscore _. I caratteri successivi al secondo possono contenere qualsiasi sequenza di cifre, caratteri alfabetici ed underscore. Analizziamo alcuni esempi di nomi per le variabili:

 

27-76k

 

Bisogna prestare attenzione nell’utilizzare variabili a cui non sia stato assegnato precedentemente un valore. In questo caso verrà visualizzato un notice, ovvero il tipo di errore meno grave presente di PHP:

echo $ciao;

 

stamperà a video un notice simile al seguente:

 

PHP Notice: Undefined variable: ciao in php shell code on line 1

 

Il consiglio, quindi, è quello di assegnare sempre un valore iniziale ad una variabile, anche se questo valore può essere null o false.

 

 

Output delle variabili

 

Una volta che abbiamo definito una variabile, molto spesso abbiamo bisogno di stamparne il suo contenuto a video. Il costrutto più importante per stampare il contenuto di una variabile è stato introdotto nel corso degli articoli precedenti, esso si basa sull’istruzione echo attraverso la quale possiamo visualizzare in output uno o più parametri.

 

28-62k

 

Scope delle variabili

 

Lo scope di una variabile è l’area in cui essa è visibile durante l’esecuzione dello script, esso può essere di tre tipi:

 

1-locale;

2-globale;

3-statico.

 

Scope locale

 

Una variabile dichiarata all’interno di una funzione ha uno scope locale e non ha visibilità al di fuori di essa.

 

29-70k

 

La keyword global

 

Se vogliamo accedere al valore di una variabile globale all’interno di una funzione possiamo utilizzare la keyword global. Attraverso di essa, infatti, possiamo bypassare la limitazione dello scope globale. Riprendendo l’esempio appena visto, richiamando la variabile attraverso global il nostro codice non genererà un errore.

 

30-53k

 

Scope statico

 

Quando una funzione termina la sua esecuzione, il contenuto occupato dalle variabile dichiarate al suo interno viene liberato in memoria. Nel caso in cui non volessimo cancellare il suo contenuto possiamo dichiararla come static. Vediamo due esempi, uno classico e uno che definisce la variabile come statica.

 

31-76k

 

Variabili superglobali

 

PHP fornisce alcune variabili superglobali che sono sempre disponibili in tutti gli scope. Approfondiremo in dettaglio queste variabili in seguito, per ora ci limiteremo a darne una breve descrizione.

 

32-105k

 

Variabili dinamiche

In circostanze molto particolari potrebbe accadere di non conoscere il nome di una determinata variabile e che tale informazione sia salvata all’interno di un’altra variabile. In questo caso è possibile utilizzare il contenuto di una variabile come variabile stessa:

 

33-46k

stamperà:

Ciao, Simone

 

(CONTINUA)

 

 

25 Risposte a “PHP – 1”

  1. document scrive:

    Thanks for a marvelous pⲟsting! I definitely enjoyed reaⅾing it, you can be a great author.

    I will be sure to bookmark your ƅlog and definitely will come back from now on. I want to encourage you to ultimately continue your great work, have
    a nice һolidaʏ weekend!
    ____
    TY

  2. read me scrive:

    I really love your blog.. Very nice colors & theme.
    Did you create this amazing site yourself? Please reply back as
    I’m trying to create my own site and would love to learn where you got this from or
    just what the theme is called. Thank you!

  3. crocus scrive:

    Hi, І do think this is a great blog. I ѕtumbledupon it 😉 I am
    going to come back yet again since I saved as a favorite it.

    Money and freedom is the bеst way to change, may you be rich and continue to guide
    others.

  4. screen scrive:

    I һave been surfing online more than 2 hours today, yеt I never found any іnterestіng article like yours.
    It is pretty worth enough for me. In my view, if all site ownerѕ and bloggers made good content ɑs you diɗ, the
    internet will be ɑ lot more useful than ever before.

  5. We offer .... scrive:

    Hi there, I enjoy reading all of your post. I like to write a little
    comment to support you.

  6. replica scrive:

    That’s an awesome idea! Brilliant work!

  7. forcible scrive:

    If some ᧐ne needs to be updated with most up-to-ⅾate tеchnologies therefore he must
    be pay a quick visit this site and be up to date every daү.

  8. reworked scrive:

    My spouse and I stumbled over here coming from a different web page and thought I should check things out.
    I like what I see so now i am following you. Look forward to
    checking out your web page repeatedly.

  9. edit scrive:

    This website was… how do I say it? Relevant!!
    Finally I’ve found something that helped me. Thanks!

  10. Best Dedicated scrive:

    I really love your website.. Excellent colors & theme.

    Did you make this website yourself? Please reply back as I’m hoping to create my very own blog and would love to learn where
    you got this from or what the theme is named. Cheers!

  11. browse around these guys scrive:

    I¡¦ve recently started a blog, the info you provide on this site has helped me tremendously. Thanks for all of your time
    _____
    TY!

  12. Froilen scrive:

    Hello my friend! I wish to say that this article is awesome, great written and
    include approximately all vital infos. I would like to look more
    posts like this.
    —————–
    Ciao amico! Vorrei dire che questo articolo è fantastico, ben scritto e
    include approssimativamente tutte le informazioni più vitali. Vorrei leggere tanti altri post come questo.

  13. Leonard scrive:

    Hey there, You have done an incredible job.
    —————
    Ehi, hai fatto un lavoro incredibile!

  14. click here scrive:

    I think the admin of this website is truly working
    hard in support of his site, because here every stuff
    is quality based information.
    ——————-
    Penso che l’amministratore di questo sito web stia davvero lavorando
    duro a sostegno del suo sito, perché qui ogni cosa è una
    informazione basata sulla qualità!

  15. football scrive:

    This is really interesting, You’re a very skilled blogger.
    I’ve joined your rss feed and look forward to seeking more of your magnificent post.
    Also, I’ve shared your web site in my social networks!
    ————-
    Questo è davvero interessante, sei un blogger molto abile.
    Ho aderito al tuo feed RSS e non vedo l’ora di cercare altri tuoi magnifici post.
    Inoltre, ho condiviso il tuo sito web nei miei social network!

  16. horaceeager scrive:

    Questo è davvero interessante, sei un blogger molto abile.

    Ho aderito al tuo feed e non vedo l’ora di saperne di più.
    Il tuo è un magnifico post. Inoltre, ho condiviso il tuo sito web nel mio
    social networks!

  17. BoyerFreeman scrive:

    Hi there to every one, it’s in fact a pleasant for me to go to see this web page, it includes helpful Information.
    ————————————-
    Ciao a tutti, in effetti è un piacere per me visitare questa pagina Web, che include informazioni utili.

  18. Felicia scrive:

    Mi piace quello che scrivi,ottimo lavoro!

  19. HamiltonHooper scrive:

    This is a topic that is close to my heart… Many thanks!
    ———–
    Questo è un argomento che mi sta molto a cuore … Mille grazie!

  20. Carlo santana scrive:

    Salvato tra i preferiti, mi piace molto il tuo sito!

  21. knoweth scrive:

    Beautiful site!

  22. resistance band scrive:

    I’ve been browsing online for over three hours, but nothing caught my attention, if everyone did interesting content like yours, the Web would be much more useful.

  23. fitbit versa scrive:

    I discovered exactly
    what I was looking for. You have ended my four day long hunt!
    God Bless you man. Have a great day. Bye

  24. Candy scrive:

    This website infinitely enriches my knowledge

  25. Ocbar scrive:

    I like it!

Lascia una risposta