Différences entre versions de « Php xdebug »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
Ligne 248 : Ligne 248 :
 
= Arrêter l'exécution =
 
= Arrêter l'exécution =
 
== CLI ==
 
== CLI ==
Pour faire du debug de script ''PHP'', il n'y a rien de plus à faire !
+
Pour faire du debug de script ''PHP'', il faut spécifier l'utilisation de Xdebug dans les préférences d'Eclipse :
 +
[[Fichier:Eclipse xdebug usage.png|500px|centré]]
  
 
Au lieu d'exécuter le script avec le bouton ''Run'' [[Fichier:eclipse run button.png]] il faut le lancer avec le bouton ''Debug'' [[Fichier:eclipse debug button.png]], ou bien avec le menu contextuel :<br>
 
Au lieu d'exécuter le script avec le bouton ''Run'' [[Fichier:eclipse run button.png]] il faut le lancer avec le bouton ''Debug'' [[Fichier:eclipse debug button.png]], ou bien avec le menu contextuel :<br>
Ligne 256 : Ligne 257 :
 
<br>
 
<br>
 
[[Fichier:Eclipse_debug_perspective_php.png|centré|800px]]
 
[[Fichier:Eclipse_debug_perspective_php.png|centré|800px]]
 +
 
== Web ==
 
== Web ==

Version du 6 décembre 2017 à 09:10

Introduction

Xdebug est une extension qui facilite le développement et le débogage des scripts / applications PHP. Vous pouvez mettre des points d'arrêts dans votre code pour stopper l'exécution de votre code et voir le contenu des variables.

Xdebug permet :

  • de voir les « Stack Traces » et ainsi afficher la pile d’appels des fonctions menant à l’erreur ;
  • d'afficher les informations de profiling permettant de mesurer combien de temps a été passé dans une fonctions pour ainsi optimiser une application ;
  • d'analyser la couverture du code pour effectuer de meilleurs tests.

Installation

Avant d'aller plus loin, n'oubliez pas que le dépôt Webtatic permet d'installer les dernières version de PHP.


L'installation n'est pas très compliquée, une fois que vous avez identifié votre version de PHP :

#  php -v
PHP 7.0.18 (cli) (built: Apr 15 2017 07:29:51) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

Il suffit d'installer la bonne version de Xdebug :

# yum -y search xdebug
Modules complémentaires chargés : fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.mirror.ate.info
 * epel: mirror.ibcp.fr
 * extras: centos.mirror.ate.info
 * updates: mirrors.standaloneinstaller.com
 * webtatic: uk.repo.webtatic.com
========================================== N/S Matched: xdebug ==========================================
php-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts
php55w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts
php56w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts
php70w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts
php71w-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts

Dans ce cas précis, la bonne version est la 7.0 :

# yum -y install php70w-pecl-xdebug.x86_64

Configuration de PHP

Il faut maintenant configurer PHP pour qu'il active Xdebug à chaque fois que l'on exécute un script.

Vous pouvez procéder de deux façons différentes. Soit on applique cette configuration à l'intégralité de la machine, soit on créer un fichier de configuration spécialement pour Xdebug.

Pour ajouter la configuration Xdebug à toute la machine, il faut effectuer les modifications suivante directement dans le fichier /etc/php.d/xdebug.ini. Sinon, vous pouvez copier le fichier php.ini en php-xdebug.ini avant d'ajouter les modifications à la fin :

; Configure les quantités de données affichées par la fonction var_dump
xdebug.var_display_max_children = 128
xdebug.var_display_max_data = 1024
xdebug.var_display_max_depth = 8

; Configure les données affichées dans les stack traces
xdebug.collect_includes = 1     ; Noms de fichiers
xdebug.collect_params = 2       ; Paramètres de fonctions / méthodes

; Affiche une stack trace à chaque fois qu'une exception est levée, même si elle est catchee
xdebug.show_exception_trace = 0

; Le nombre maximal de profondeur d'appels de fonctions
; (Sécurité contre les récursions infinies)
xdebug.max_nesting_level = 64

Exemple d'affichage

CLI

Prenons le code suivant :

<?php
$debug = array (
			'hello, world!',
			array (	'1','2' => ( object ) array (	'chaine',1,TRUE)),
			array ('xml' => simplexml_load_string ( 
					'<?xml version="1.0" encoding="UTF-8"?>
						<root>
    						<utilisateur id="1">
        						<name>Jc</name>
        						<age>31</age>
    						</utilisateur>
    						<utilisateur id="2">
        						<name>Gérard</name>
        						<age>50</age>
    						</utilisateur>
						</root>' 
					) 
			) 
);

var_dump ( $debug );

?>

Cet exemple affichera les données comme ceci :

Au lieu de :

# php -f test.php
/root/workspace/XDebug/src/test.php:21:
array(3) {
  [0] =>
  string(13) "hello, world!"
  [1] =>
  array(2) {
    [0] =>
    string(1) "1"
    [2] =>
    class stdClass#1 (3) {
      public ${0} =>
      string(6) "chaine"
      public ${1} =>
      int(1)
      public ${2} =>
      bool(true)
    }
  }
  [2] =>
  array(1) {
    'xml' =>
    class SimpleXMLElement#2 (1) {
      public $utilisateur =>
      array(2) {
        [0] =>
        class SimpleXMLElement#3 (3) {
          public $@attributes =>
          array(1) {
            'id' =>
            string(1) "1"
          }
          public $name =>
          string(2) "Jc"
          public $age =>
          string(2) "31"
        }
        [1] =>
        class SimpleXMLElement#4 (3) {
          public $@attributes =>
          array(1) {
            'id' =>
            string(1) "2"
          }
          public $name =>
          string(7) "Gérard"
          public $age =>
          string(2) "50"
        }
      }
    }
  }
}
# php -f test.php
array(3) {
  [0]=>
  string(13) "hello, world!"
  [1]=>
  array(2) {
    [0]=>
    string(1) "1"
    [2]=>
    object(stdClass)#1 (3) {
      [0]=>
      string(6) "chaine"
      [1]=>
      int(1)
      [2]=>
      bool(true)
    }
  }
  [2]=>
  array(1) {
    ["xml"]=>
    object(SimpleXMLElement)#2 (1) {
      ["utilisateur"]=>
      array(2) {
        [0]=>
        object(SimpleXMLElement)#3 (3) {
          ["@attributes"]=>
          array(1) {
            ["id"]=>
            string(1) "1"
          }
          ["name"]=>
          string(2) "Jc"
          ["age"]=>
          string(2) "31"
        }
        [1]=>
        object(SimpleXMLElement)#4 (3) {
          ["@attributes"]=>
          array(1) {
            ["id"]=>
            string(1) "2"
          }
          ["name"]=>
          string(7) "Gérard"
          ["age"]=>
          string(2) "50"
        }
      }
    }
  }
}

https://eclipse.org/pdt/

Web

Il en va de même côté Web

Avec Xdebug :

Sans Xdebug :

/var/www/html/test.php:21: array (size=3)

 0 => string 'hello, world!' (length=13)
 1 => 
   array (size=2)
     0 => string '1' (length=1)
     2 => 
       object(stdClass)[1]
         public 0 => string 'chaine' (length=6)
         public 1 => int 1
         public 2 => boolean true
 2 => 
   array (size=1)
     'xml' => 
       object(SimpleXMLElement)[2]
         public 'utilisateur' => 
           array (size=2)
             ...

array(3) { [0]=> string(13) "hello, world!" [1]=> array(2) { [0]=> string(1) "1" [2]=> object(stdClass)#1 (3) { [0]=> string(6) "chaine" [1]=> int(1) [2]=> bool(true) } } [2]=> array(1) { ["xml"]=> object(SimpleXMLElement)#2 (1) { ["utilisateur"]=> array(2) { [0]=> object(SimpleXMLElement)#3 (3) { ["@attributes"]=> array(1) { ["id"]=> string(1) "1" } ["name"]=> string(2) "Jc" ["age"]=> string(2) "31" } [1]=> object(SimpleXMLElement)#4 (3) { ["@attributes"]=> array(1) { ["id"]=> string(1) "2" } ["name"]=> string(7) "Gérard" ["age"]=> string(2) "50" } } } } }

Xdebug n'améliore pas uniquement le rendu de var_dump mais également les stacks trace ou encore les messages d'erreurs !

Arrêter l'exécution

CLI

Pour faire du debug de script PHP, il faut spécifier l'utilisation de Xdebug dans les préférences d'Eclipse :

Eclipse xdebug usage.png

Au lieu d'exécuter le script avec le bouton Run Eclipse run button.png il faut le lancer avec le bouton Debug Eclipse debug button.png, ou bien avec le menu contextuel :

Eclipse run-debug contextual menu.png

Lorsque c'est la première fois que vous entrez en mode Debug, Eclipse vous propose de modifier la perspective. Vous pouvez cocher la case et valider pour accéder à la perspective Debug.

Eclipse debug perspective php.png

Web