1 — Introduzione a PHP
Scopo del modulo: introdurre gli studenti a PHP come linguaggio lato server, farli installare e configurare un ambiente locale (XAMPP / LAMP / MAMP), eseguire il primo script <?php echo "Hello World"; ?>, capire come funziona il server locale e sperimentare la shell/CLI di PHP. Alla fine del modulo ogni partecipante dovrà saper creare ed eseguire un file PHP, conoscere il ciclo richiesta-risposta e le basi di sicurezza per l’ambiente di sviluppo.
Risultati di apprendimento (learning outcomes)
Al termine delle 2 ore lo studente sarà in grado di:
-
Riassumere cos’è PHP e dove viene utilizzato (web back-end, API, scripting CLI, generazione HTML).
-
Installare e avviare un ambiente locale basato su XAMPP / LAMP / MAMP e individuare la document root.
-
Creare ed eseguire uno script PHP di base (
index.php) via server locale e via server integrato (php -S). -
Spiegare il ciclo richiesta → esecuzione PHP → risposta HTTP e la differenza tra mod_php, PHP-FPM e PHP CLI.
-
Usare
phpinfo()per verificare la versione e le estensioni; configurare le impostazioni principali inphp.iniper sviluppo. -
Eseguire semplici operazioni di input (form html) e stampa in modo sicuro (sanitizzazione base).
Struttura temporale proposta (120 minuti)
-
Introduzione e panoramica su PHP — 10′
-
Installazione e panoramica ambienti (XAMPP / LAMP / MAMP) — 25′
-
Primo script & esecuzione (index.php) — 15′
-
Ciclo server / request → response; mod_php vs PHP-FPM; phpinfo() — 20′
-
Esempio pratico: form POST e sanitizzazione — 20′
-
CLI PHP, server incorporato
php -S, troubleshooting — 15′ -
Q&A e compiti — 15′
1) Cos’è PHP e dove si usa (breve panoramica)
-
PHP è un linguaggio di scripting interpretato pensato originariamente per la generazione dinamica di pagine web lato server. Oggi è ampiamente usato per applicazioni web (WordPress, Drupal, Laravel, Symfony), API REST, automazioni CLI e generazione di contenuti dinamici.
-
Vantaggi: ampia diffusione, librerie mature, integrazione nativa con MySQL/MariaDB, ampia comunità.
-
Limiti/attenzioni: prestazioni dipendono dalla versione (usare PHP 8+ quando possibile), attenzione alla sicurezza e alle configurazioni di produzione.
2) Installazione ambiente (XAMPP / LAMP / MAMP) — guida rapida
Nota: XAMPP, LAMP e MAMP sono pacchetti “stack” che includono web server (Apache o Nginx), PHP e database (MySQL/MariaDB). Scegliere lo strumento in base al sistema operativo e alla preferenza didattica.
XAMPP (Windows / macOS / Linux) — passi essenziali
-
Scaricare XAMPP dal sito ufficiale e installare (installer grafico).
-
Avviare il Control Panel (Windows/macOS) e far partire Apache (ed eventualmente MySQL/MariaDB).
-
Document root predefinita:
-
Windows:
C:\xampp\htdocs\ -
macOS (XAMPP):
/Applications/XAMPP/htdocs/ -
Linux (XAMPP):
/opt/lampp/htdocs/
-
-
Posizionare
index.phpdentro la document root e aprirehttp://localhost/index.phpnel browser. -
Per comandi su Linux XAMPP:
sudo /opt/lampp/lampp start/stop/restart.
LAMP (Linux: Apache + MySQL + PHP)
-
Su Debian/Ubuntu (esempio):
sudo apt updatesudo apt install apache2 php libapache2-mod-php mysql-server# abilitare il modulo PHP per Apache (di solito libapache2-mod-php lo fa)sudo systemctl start apache2
-
Document root tipico:
/var/www/html/ -
File PHP in
/var/www/html/index.php→http://localhost/
MAMP (macOS)
-
Scaricare MAMP; avviarlo; document root:
/Applications/MAMP/htdocs/(configurabile via interfaccia). -
Avviare Apache & MySQL dal pannello MAMP. Aprire
http://localhost:8888/(porta predefinita MAMP) ohttp://localhost/se configurata diversamente.
Permessi e proprietario (Linux)
-
Se si usa
/var/www/html, evitare di lavorare come root; cambiare proprietario del progetto o usare gruppi:
sudo chown -R $USER:www-data /var/www/html/tuo_progettosudo chmod -R 755 /var/www/html/tuo_progetto
3) Primo script PHP: Hello World (pratico)
Passi rapidi:
-
Creare file
index.phpnella document root:
<?phpecho "Hello World";
-
Aprire nel browser:
http://localhost/index.php→ dovrebbe mostrareHello World.
Nota: evitare i short tags <? perché potrebbero essere disabilitati; usare sempre <?php.
Esempio con HTML:
<!doctype html><html><head><meta charset="utf-8"><title>Hello</title></head><body><?php echo "<h1>Hello World</h1>"; ?></body></html>
4) Come funziona il server locale (request → PHP → response)
Ciclo semplificato:
-
Il browser invia una richiesta HTTP (GET/POST) al server (
http://localhost/path). -
Il server web (Apache/Nginx) riceve la richiesta.
-
Se la risorsa è un file statico (
.html,.css,.jpg), il server lo restituisce direttamente. -
Se la risorsa è un file PHP, il server passa la richiesta all’interprete PHP (tramite modulo
mod_phpin Apache oppure tramitePHP-FPM+FastCGIse configurato con Nginx o Apache + proxy).
-
-
L’interprete PHP esegue lo script: legge codice PHP, esegue logica, accede alle risorse (DB, file), genera output (tipicamente HTML o JSON).
-
Il server riceve l’output (stdout) da PHP e lo invia come risposta HTTP al browser.
-
Il browser visualizza il contenuto restituito.
Modalità di integrazione PHP-Server
-
mod_php (Apache module): PHP è caricato direttamente come modulo Apache; semplice per sviluppo, meno efficiente in scenari con worker multipli.
-
PHP-FPM (FastCGI Process Manager): PHP gira in processi separati e il webserver invia le richieste ad essi; più moderno e performante in produzione.
-
PHP CLI: linea di comando (
php script.php) per script non-web (cron, tool).
Test rapido: phpinfo()
Creare info.php:
<?phpphpinfo();
Aprire http://localhost/info.php per vedere versione PHP, estensioni attive, php.ini caricato, variabili d’ambiente.
5) Configurazioni utili per sviluppo (php.ini, error reporting)
-
File di configurazione:
php.ini(posizione indicata inphpinfo()). -
Per ambiente di sviluppo:
-
display_errors = On -
error_reporting = E_ALL -
display_startup_errors = On
-
-
In produzione disabilitare
display_errorse loggare gli errori invece in file:log_errors = Oneerror_log = /path/to/php-error.log.
IMPORTANTE: Non lasciare
display_errors = Onin server esposti pubblicamente — può rivelare percorsi o credenziali.
6) Esempio pratico: form HTML + elaborazione POST (sanitizzazione base)
form.php
<!doctype html><html><head><meta charset="utf-8"><title>Saluto</title></head><body><form method="post" action=""><label>Nome: <input type="text" name="name"></label><button type="submit">Invia</button></form><?phpif ($_SERVER['REQUEST_METHOD'] === 'POST') {// usare filter_input per sicurezza$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_SPECIAL_CHARS);if ($name === null || $name === '') {echo "<p style='color:orange'>Inserisci un nome valido.</p>";} else {// escapiamo sempre l'output per prevenire XSSecho "<p>Ciao, " . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . "!</p>";}}?></body></html>
Punti didattici:
-
$_POST/$_GET/$_REQUESTsono superglobali: spiegare differenze. -
Sanitizzazione:
filter_input,htmlspecialchars()per output, prepared statements per DB (vedi nota sicurezze). -
Validazione vs. sanitizzazione: validare i dati (es.
filter_var($email, FILTER_VALIDATE_EMAIL)) prima di usarli.
7) PHP CLI e server incorporato (utile per sviluppo rapido)
-
Eseguire script PHP dalla riga di comando:
php script.php
-
Server HTTP integrato (solo per sviluppo): posizionarsi nella cartella del progetto e:
php -S localhost:8000
Poi aprire http://localhost:8000/ — comodo per testare senza configurare Apache/Nginx. Per usare router personalizzato:
php -S localhost:8000 router.php
8) Basi di connessione al database (PDO) — esempio minimo
Connessione sicura con PDO e prepared statements:
<?php$dsn = 'mysql:host=127.0.0.1;dbname=testdb;charset=utf8mb4';$user = 'root';$pass = ''; // in XAMPP/MAMP default password vuota per root$options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,];try {$pdo = new PDO($dsn, $user, $pass, $options);} catch (PDOException $e) {die("Connessione fallita: " . $e->getMessage());}$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');$stmt->execute(['email' => 'test@example.com']);$user = $stmt->fetch();
Indicazioni: usare variabili d’ambiente o file di configurazione sicuro per credenziali (non commit su git).
9) Sicurezza di base (sviluppo vs produzione)
-
Non esporre XAMPP/MAMP ad Internet senza protezioni. Ambiente locale = solo localhost per sviluppo.
-
Non lasciare
display_errors = Onin produzione. -
Usare prepared statements per tutte le query SQL (evita SQL injection).
-
Validare e sanitizzare input.
-
Limitare file upload (dimensione, tipologie) e salvare fuori dalla document root quando possibile.
-
Non immettere credenziali in chiaro nel repo: usare
.envo variabili d’ambiente e assicurarsi che.envsia in.gitignore.
10) Esercizi pratici (da svolgere in aula o come compito)
Esercizio A — Hello World
-
Creare
index.phpconecho "Hello World";ed eseguirlo da server locale.
Esercizio B — Form + validazione
-
Creare
form.phpcome sopra; aggiungere validazione su lunghezza del nome (min 2, max 50).
Esercizio C — Server incorporato
-
Avviare
php -S localhost:8000nella cartella del progetto e testare la stessa app senza XAMPP.
Esercizio D — Infopage
-
Creare
info.phpconphpinfo();ed individuare:-
percorso
php.ini -
versione PHP
-
estensioni caricate (PDO, mbstring, openssl)
-
Esercizio E — Connessione DB (opzionale, avanzato)
-
Creare database
testdb, tabellausers (id, name, email), inserire 2 righe e leggere i dati con PDO (prepared statement).
11) Troubleshooting: errori comuni e soluzioni
-
Pagina PHP visualizza il codice sorgente → probabilmente il file non è servito da un server PHP (stai aprendo
file://invece dihttp://localhost/) o PHP non è abilitato nel server. -
Pagina bianca / 500 Internal Server Error → controllare
error_logdi Apache ephp_error.log; abilitaredisplay_errorsin dev. -
Short tags
<?non funzionano → abilitareshort_open_taginphp.ini(meglio: usare<?php). -
Permessi file (403 Forbidden) → verificare permessi e proprietà del file webserver.
-
MySQL access denied → controllare user/password e host (soprattutto
127.0.0.1vslocalhost). -
Estensioni mancanti (es. pdo_mysql) → abilitare estensione in
php.inio installarla (es.sudo apt install php-mysql).
12) Rubrica di valutazione (sintetica)
-
Installazione e ambiente (30%): XAMPP/LAMP/MAMP installato, Apache avviato, file in document root.
-
Primo script (20%):
index.phpeseguito correttamente nel browser. -
Comprensione server flow (20%): spiegazione chiara del ciclo request → PHP → response e differenze mod_php/PHP-FPM.
-
Esercizi (20%): form funzionante con sanitizzazione; uso
php -Sophpinfo(). -
Documentazione e sicurezza (10%): breve README con info su come avviare il progetto e note di sicurezza.
13) Cheat-sheet rapido (comandi & percorsi utili)
Percorsi document root (tipici)
-
XAMPP Windows:
C:\xampp\htdocs\ -
XAMPP macOS:
/Applications/XAMPP/htdocs/ -
XAMPP Linux:
/opt/lampp/htdocs/ -
LAMP (Ubuntu):
/var/www/html/ -
MAMP:
/Applications/MAMP/htdocs/
Comandi rapidi
# avviare server integrato (dev)php -S localhost:8000# eseguire script CLIphp script.php# avviare XAMPP (Linux)sudo /opt/lampp/lampp start# systemd (Apache on Ubuntu)sudo systemctl start apache2sudo systemctl status apache2# visualizzare versione PHPphp --version# cercare php.ini con phpinfo() oppure:php -i | grep "Loaded Configuration File"
php.ini — impostazioni utili (dev)
display_errors = Onerror_reporting = E_ALLdisplay_startup_errors = Onlog_errors = Onerror_log = /path/to/php-error.log
14) Risorse consigliate (documentazione ufficiale e tutorial)
-
Manuale ufficiale PHP — php.net (documentazione, funzioni, security).
-
Documentazione XAMPP / MAMP / Apache / Nginx (siti ufficiali).
-
Introduzioni su PDO, prepared statements e sicurezza SQL (manuale PHP).
-
Tutorial ufficiali (W3Schools, MDN-like resources) e corsi base.

Nessun commento:
Posta un commento