Debug Uno delle operazioni essenziali per il funzionamento di un sito web è quello del controllo degli errori prima della messa online.

Se il sito è particolarmente grosso, con molte query e script complessi è molto facile non riuscire a scoprire tutti i bachi di cui ne è affetto. Al tutto si aggiungono i tempi ristretti per la messa online e la fretta del cliente.

Per questo motivo è importante iniziare a ragionare anche sotto questo aspetto e gestire eventuali operazioni che potrebbero creare problemi dall’inizio.

Come facciamo ad aiutarci nel compito del debug?

Il sistema è molto semplice e si ispira alle notifiche automatiche di errore che invia Mozilla Firefox o qualsiasi altro software ad ogni crash.

In pratica se una determinata istruzione non dovesse andare a buon fine allora mi viene inviata in automatico un email con informazioni riguardanti il crash e l’istruzione che l’ha generata.

Facciamo un esempio:

Supponiamo che voglia caricare da un database Mysql i dati riguardanti i calciatori del campionato italiano di calcio e stampare per ogni calciatore la seguente stringa

Il giocatore NOME COGNOME che gioca nella squadra SQUADRA ha segnato NUMERO DI GOAL

Le parole in maiuscolo verranno sostituiti dai dati ricavati dal db che contiene solo 5 campi: id_calciatore, nome_calciatore, cognome_calciatore, squadra, goal_fatti

Ecco gli eventuali problemi che vorremmo ci fossero segnalati

  • Errore momentaneo nella connessione al database
  • Errore nella query che carica i dati dal database
  • Non ci sono i calciatori inseriti nel database

Per iniziare creiamo il file funzioni_utili.php dove verrà inserita la funzione che ci invia l’email automatica

function email_problemi($problema)
{
 //invia un email al tecnico non dettaglio problema
 $dest='indirizzofinto@gmail.com';
 $mittente = 'From: "Miositoweb" '."<$dest>";
 $oggetto='Problema verificato';
 $messaggio="Miositoweb - Email automatica problema:\n";
 $messaggio.="$problema";
 mail($dest, $oggetto, $messaggio, $mittente);
}

Creiamo il file index.php che effettua le operazioni che ci interessano

Mel file index.php andremo ad includere il file funzioni_utili.php con il codice per l’invio della mail

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Prova</title>
</head>
<body>
<?php
//carico il file con la funzione di invio email all'admin
include("funzioni-utili.php");
//configuro il i parametri per l'accesso al db
$db["user"]='root';
$db["name"]='database_calciatori';
$db["pass"]='password';
$db["host"]='localhost';
//effettuo la connessione al db con invio mail all'admin in caso di errore
$conn=mysql_connect($db["host"],$db["user"],$db["pass"]) or die(email_problemi('Errore nella connessione al db'));
mysql_select_db($db["name"], $conn);
//effettuo la query che permette di caricare i dati dei calciatori con invio mail all'admin in caso di errore nella query
$q_carica_calciatori="SELECT * FROM calciatori";
$r_carica_calciatori=mysql_query($q_carica_calciatori) or die(email_problemi('Errore query recupero dei dati dei calciatori'));
$n_carica_calciatori=mysql_num_rows($r_carica_calciatori);
//carico le info sui calciatori e li mostro a video
//Se non ci sono calciatori nel database invio la mail all'admin
if ($n_carica_calciatori!=0)
{
 while($riga=mysql_fetch_array($r_carica_calciatori))
 {
 $nome=$riga["nome_calciatore"];
 $cognome=$riga["cognome_calciatore"];
 $squadra=$riga["squadra"];
 $goal_fatti=$riga["goal_fatti"];
 echo "Il giocatore $nome $cognome che gioca nella squadra $squadra ha segnato $goal_fatti goal<br>";
 }
}else{
 email_problemi('Il database non ha nessun calciatore. Inseriscili');
}
//chiudo la connessione al db
mysql_close($conn);
?>
</body>
</html>

Come avete visto con poche semplici istruzioni possiamo far si che ci venga inviata un email automatica che ci segnala eventuali problemi e malfunzionamenti. Nella messaggio dell’email possiamo inserire maggiori informazioni tipo il numero di riga in cui viene chiamata, o il nome della funzione che l’ha generata.

Spero possa esservi utile.