H2 - P2019

Développement web

Cours 20 - 2016-01-25

PHP

Debug

Afficher les erreurs

On peut choisir d'afficher ou non les erreurs

Il est possible de n'afficher que certains types d'erreurs

La configuration dépend du logiciel utilisé

MAMP (mac - gratuit)

Pour afficher les erreurs sur MAMP, il faut modifier le fichier de configuration de PHP manuellement

  • Lancer MAMP
  • Aller dans Préférences
  • Noter la version de PHP
  • Aller dans le dossier Applications/MAMP/bin/php/phpX.X.X/conf (remplacer X.X.X par version de PHP)
  • Trouver la ligne display_errors et mettre On en valeur
  • Trouver la ligne error_reporting et mettre E_ALL en valeur

MAMP PRO (mac - payant)

Il est possible de choisir les messages à afficher

Et de les afficher dans la page ou dans les logs

WAMP (windows - gratuit)

Il est possible de choisir si oui ou non les erreurs s'affichent

WAMP (windows - gratuit)

Affichage plus lisible des erreurs

Les paramètres d'affichage des erreurs peuvent être surchargés directement en PHP

On utilise la méthode error_reporting() pour choisir quels messages afficher

Et la méthode init_set('display_errors',1) pour afficher ou non les erreurs


//Peut être remplacé par E_WARNING, E_PARSE, E_NOTICE, E_ERROR
error_reporting(E_ALL); 
ini_set('display_errors', 1);
                    

Les types d'erreurs

Il existe 4 principaux types d'erreurs en PHP

  • Notice
  • Warning
  • Fatal Error
  • Parse Error

Il est important de toutes les corriger

Notice

Une erreur qui n'empêche absolument pas le script de fonctionner

Il s'agit d'une information sur un comportement étrange


$foo = ['test1','test2','test3'];
echo $foo[3];
                    

Warning

Une erreur pouvant potentiellement altérer le fonctionnement du script


include 'fichier_qui_nexiste_pas.php';
                    

Fatal error

Une erreur empêchant le script de fonctionner


require 'fichier_qui_nexiste_pas.php';
                    

Parse error (syntax error)

Impossibilité de compiler le script PHP


echo 'hey'
echo 'boum error';
                    

Try ... Catch

Certains scripts peuvent envoyer des Exceptions avant d'envoyer une erreur

Il est possible d'attraper ces exceptions pour prévenir les erreurs


// Exemple de connexion à une base de données avec PDO
try
{
    $dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1','user','password');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
    die('Impossible de se connecter à la base de données');
}
                    

$e contient plusieurs méthodes permettant d'identifier l'Exception

  • getMessage récupère le message de l'exception
  • getFile récupère le fichier dans lequel l'exception est survenue
  • getLine récupère la ligne dans laquelle l'exception est survenue
  • getCode récupère le code de l'exception

Stopper le script

Deux méthodes permettent d'arrêter le script

Très utile pour éviter que le reste du site se charge


$foo = 'test';

// Avec exit
echo $foo;
exit;

// Avec die
die($foo);
                    

Afficher le contenu d'une variable

Certaines variables comme les tableaux ne peuvent pas être affichées simplement (via echo ou die)

Deux méthodes permettent d'afficher efficacement le contenu

var_dump

print_r

var_dump contient plus d'informations (tailles des tableaux et types des contenus)


$foo = [40,'test',true];

echo $foo; // Array

print_r($foo); // Array ( [0] => 40 [1] => test [2] => 1 )

var_dump($foo); // array(3) { [0]=> int(40) [1]=> string(4) "test" [2]=> bool(true) }
                    

Les entourer des balises html <pre></pre> permet d'appliquer des retours à la ligne et une indentation HTML pour une meilleure lisibilité


$foo = [40,'test',true];

echo '<pre>';
var_dump($foo);
echo '</pre>';
                    

Le code étant long à écrire et difficile à retenir, il est conseillé de créer un snippet

Pour Sublime, aller dans outils > New Snippet

Insérez le code suivant


<snippet>
    <content><![CDATA[
echo '<pre>';
print_r(${1:$this});
echo '</pre>';
]]></content>
    <tabTrigger>printr</tabTrigger>
    <scope>source.php</scope>
</snippet>
                    

Sauvegardez-le dans le dossier User de Sublime Text et appelez-le printr.sublime-snippet

Pour trouver ce dossier allez dans Sublime Text > Preferences > Browse Packages...

Lorsque vous faites du php, écriez printr puis appuyez sur TAB