domenica 26 ottobre 2025

Corso di PHP: 1 – Introduzione a PHP

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:

  1. Riassumere cos’è PHP e dove viene utilizzato (web back-end, API, scripting CLI, generazione HTML).

  2. Installare e avviare un ambiente locale basato su XAMPP / LAMP / MAMP e individuare la document root.

  3. Creare ed eseguire uno script PHP di base (index.php) via server locale e via server integrato (php -S).

  4. Spiegare il ciclo richiesta → esecuzione PHP → risposta HTTP e la differenza tra mod_php, PHP-FPM e PHP CLI.

  5. Usare phpinfo() per verificare la versione e le estensioni; configurare le impostazioni principali in php.ini per sviluppo.

  6. Eseguire semplici operazioni di input (form html) e stampa in modo sicuro (sanitizzazione base).


Struttura temporale proposta (120 minuti)

  1. Introduzione e panoramica su PHP — 10′

  2. Installazione e panoramica ambienti (XAMPP / LAMP / MAMP) — 25′

  3. Primo script & esecuzione (index.php) — 15′

  4. Ciclo server / request → response; mod_php vs PHP-FPM; phpinfo() — 20′

  5. Esempio pratico: form POST e sanitizzazione — 20′

  6. CLI PHP, server incorporato php -S, troubleshooting — 15′

  7. 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

  1. Scaricare XAMPP dal sito ufficiale e installare (installer grafico).

  2. Avviare il Control Panel (Windows/macOS) e far partire Apache (ed eventualmente MySQL/MariaDB).

  3. Document root predefinita:

    • Windows: C:\xampp\htdocs\

    • macOS (XAMPP): /Applications/XAMPP/htdocs/

    • Linux (XAMPP): /opt/lampp/htdocs/

  4. Posizionare index.php dentro la document root e aprire http://localhost/index.php nel browser.

  5. Per comandi su Linux XAMPP: sudo /opt/lampp/lampp start / stop / restart.

LAMP (Linux: Apache + MySQL + PHP)

  • Su Debian/Ubuntu (esempio):

sudo apt update
sudo 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.phphttp://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) o http://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_progetto
sudo chmod -R 755 /var/www/html/tuo_progetto

3) Primo script PHP: Hello World (pratico)

Passi rapidi:

  1. Creare file index.php nella document root:

<?php
echo "Hello World";
  1. Aprire nel browser: http://localhost/index.php → dovrebbe mostrare Hello 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:

  1. Il browser invia una richiesta HTTP (GET/POST) al server (http://localhost/path).

  2. 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_php in Apache oppure tramite PHP-FPM + FastCGI se configurato con Nginx o Apache + proxy).

  3. L’interprete PHP esegue lo script: legge codice PHP, esegue logica, accede alle risorse (DB, file), genera output (tipicamente HTML o JSON).

  4. Il server riceve l’output (stdout) da PHP e lo invia come risposta HTTP al browser.

  5. 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:

<?php
phpinfo();

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 in phpinfo()).

  • Per ambiente di sviluppo:

    • display_errors = On

    • error_reporting = E_ALL

    • display_startup_errors = On

  • In produzione disabilitare display_errors e loggare gli errori invece in file: log_errors = On e error_log = /path/to/php-error.log.

IMPORTANTE: Non lasciare display_errors = On in 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>
<?php
if ($_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 XSS
echo "<p>Ciao, " . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . "!</p>";
}
}
?>
</body>
</html>

Punti didattici:

  • $_POST/$_GET/$_REQUEST sono 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 = On in 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 .env o variabili d’ambiente e assicurarsi che .env sia in .gitignore.


10) Esercizi pratici (da svolgere in aula o come compito)

Esercizio A — Hello World

  • Creare index.php con echo "Hello World"; ed eseguirlo da server locale.

Esercizio B — Form + validazione

  • Creare form.php come sopra; aggiungere validazione su lunghezza del nome (min 2, max 50).

Esercizio C — Server incorporato

  • Avviare php -S localhost:8000 nella cartella del progetto e testare la stessa app senza XAMPP.

Esercizio D — Infopage

  • Creare info.php con phpinfo(); ed individuare:

    • percorso php.ini

    • versione PHP

    • estensioni caricate (PDO, mbstring, openssl)

Esercizio E — Connessione DB (opzionale, avanzato)

  • Creare database testdb, tabella users (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 di http://localhost/) o PHP non è abilitato nel server.

  • Pagina bianca / 500 Internal Server Error → controllare error_log di Apache e php_error.log; abilitare display_errors in dev.

  • Short tags <? non funzionano → abilitare short_open_tag in php.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.1 vs localhost).

  • Estensioni mancanti (es. pdo_mysql) → abilitare estensione in php.ini o 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.php eseguito 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 -S o phpinfo().

  • 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 CLI
php script.php
# avviare XAMPP (Linux)
sudo /opt/lampp/lampp start
# systemd (Apache on Ubuntu)
sudo systemctl start apache2
sudo systemctl status apache2
# visualizzare versione PHP
php --version
# cercare php.ini con phpinfo() oppure:
php -i | grep "Loaded Configuration File"

php.ini — impostazioni utili (dev)

display_errors = On
error_reporting = E_ALL
display_startup_errors = On
log_errors = On
error_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

Corso Fondamenti di Informatica e Reti: 6 Reti di computer e Internet

Reti di computer e Internet Introduzione Prova a pensare alla vita quotidiana senza reti informatiche: niente messaggi WhatsApp, niente m...