web-dev-qa-db-fra.com

Comment déboguer php artisan serve dans PHPStorm?

J'utilise PHPStorm pour développer mes pages Web PHP. Tout fonctionne correctement avec mon serveur Apache, XDebug et un simple site Web PHP. Pas de problème.

Mais, lorsque j'essaie de déboguer un Laravel 5.1 Web Project using php artisan serve, Je ne peux pas déboguer les points d'arrêt. C'est comme le php artisan serve utiliser un autre serveur ...

Et sur mon PHPStorm, je vois toujours:

En attente d'une connexion entrante avec la clé ide '(randomNumberHere)'

J'ai configuré tout dans PHPStorm (permettant le débogage à distance, le port correct, etc.), et avec des projets "normaux" PHP tout fonctionne bien.

Quelqu'un peut-il me dire si je dois changer quelque chose?

Merci!

23
chemitaxis

Débogage à l'aide de php artisan serve ne fonctionne que si vous avez activé le débogage dans le fichier ini.

@Bogdan a souligné la raison. artisan serve appellera PHP Serveur Web intégré mais ne transmet pas les options de ligne de commande php (nommées options d'interpréteur dans PHPStorm).

c'est-à-dire si vous exécutez à partir de la ligne de commande:

$ php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_Host=127.0.0.1 artisan serve

Ensuite, ces options données par -d ne sont pas passés à appelé PHP Serveur Web intégré. Vous pouvez voir l'appel du serveur intégré ici .

La solution de contournement dans PHPStorm consiste à créer une configuration d'exécution qui appelle directement PHP Serveur Web intégré. Instructions:

  1. Ouvrez Exécuter -> Modifier les configurations ...
  2. Créer un nouveau "serveur Web intégré PHP"
  3. Définissez les valeurs:

    • Hôte: localhost
    • Port: 8000
    • Racine du document: sélectionnez le catalogue public de Laravel
    • Vérifier Use route script et sélectionnez server.php dans Laravel projette le répertoire racine.
    • Options d'interpréteur: -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_Host=127.0.0.1
  4. OK et courez.

Maintenant, PHPStorm exécutera la même commande que php artisan serve le fait avec des options d'interpréteur supplémentaires. En fait, le php artisan serve le seul but est d'ajouter le server.php à PHP Build-In Web Server. server.php émule simplement _ mod_rewrite Fonctionnalité.

Mise à jour: Bon rappel de @ attila-szeremi: assurez-vous que "Démarrer l'écoute pour PHP Déboguer les connexions" est activé, ce que vous devez faire manuellement si vous ne le faites pas ' t exécuter une configuration PhpStorm avec "Debug"

34
raigu

Je n'utilise pas phpstorm, mais peut-être que la solution que j'utilise pour le débogage dans les netbeans s'avérera utile.

artisan serve utilise un fichier ini différent de celui chargé par votre conteneur Web

Trouvez cela en tapant

php --ini

Sur ma boîte Ubuntu, elle est située à

Loaded Configuration File:         /etc/php/7.0/cli/php.ini

Modifiez l'ini pour votre environnement cli et utilisez la même configuration que vous avez utilisée pour l'activer pour votre conteneur Web;

Exemple...

[Zend]
zend_extension=/usr/lib/php/20151012/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_Host=127.0.0.1
xdebug.remote_port=9000

La seule mise en garde pour cela, c'est que tant que vous l'avez configuré, cela aura un impact sur d'autres choses pour lesquelles vous utilisez php cli.

Remarque supplémentaire

Si vous souhaitez que votre session de débogage démarre toujours automatiquement (au lieu d'initier un débogage distant via le paramètre de demande d'URL XDEBUG_SESSION_START = nom, par exemple, lors du débogage de commandes CLI), vous pouvez définir XDEBUG pour toujours démarrer une session de débogage distant avec cette configuration supplémentaire;

xdebug.remote_autostart = 1

Voir https://xdebug.org/docs/all

Normalement, vous devez utiliser une variable HTTP GET/POST spécifique pour démarrer le débogage à distance (voir Débogage à distance). Lorsque ce paramètre est défini sur 1, Xdebug tentera toujours de démarrer une session de débogage à distance et tentera de se connecter à un client, même si la variable GET/POST/COOKIE n'était pas présente.

5
Josh

Donc, après être passé par Jeffry Be Awesome in PhpStorm , j'avais été coincé dans une situation similaire à l'OP (dans le chapitre concernant Xdebug et Laravel). Je configurais les points d'arrêt, mais PhpStorm n'a pas pu interrompre l'exécution en fonction de ces points. Et, pour être honnête, la réponse de Josh ici m'a un peu aidé à comprendre le problème, mais n'était pas assez claire pour moi. Alors, je suis sorti et j'ai trouvé la solution moi-même par la méthode hit and trial, dont je veux partager la solution finale. Peut-être que cela sera utile pour certaines personnes qui se demandent encore.

Tout d'abord, comme OP l'a dit/deviné, php artisan serverne utilise un autre serveur. Il s'agit du serveur Web intégré de PHP plus le fichier de routeur server.php . Et les configurations qu'il utilise sont les configurations CLI. Essayez php --ini pour trouver toutes les configurations incluses.

Dans mon cas (Ubuntu 17.10), le fichier de configuration Xdebug inclus était de l'emplacement /etc/php/7.2/cli/conf.d/20-xdebug.ini. J'ai ajouté la deuxième ligne pour activer xdebug distant et maintenant le fichier ressemble à ceci avec un total de 2 lignes:

zend_extension=xdebug.so xdebug.remote_enable=1

Maintenant, pour configurer PhpStorm:

  1. Run> Edit Configurations et donnez n'importe quel nom ou laissez-le simplement Sans nom
  2. Cliquez sur ... après l'option Server:
  3. Cliquez sur + et donnez n'importe quel nom (par exemple Laravel App)
  4. Définissez Hôte comme localhost, Port comme 8000 and Debugger as Xdebug et laissez toutes les autres coches décochées!
  5. Cliquez sur Apply/OK
  6. Dans la liste déroulante Server: sélectionnez celui que nous venons de configurer.
  7. Définissez Start URL: l'URL où vous souhaitez commencer le débogage (par exemple \user)
  8. Sélectionnez le navigateur que vous préférez.
  9. Cliquez sur Apply/OK

N'oubliez pas que le débogueur ne fonctionnera qu'après le démarrage du serveur Web réel, qui est le serveur qui commence par php artisan server commande.

Maintenant, démarrez le serveur Web ie. php artisan serve et dans PhpStorm, cliquez sur Run> Debug 'your-debug-config', et tout devrait bien fonctionner!

1
Anup Dhakal

Partie 1 Exécuter> Modifier les configurations

choisissez PHP-BuiltIn Web Server et définissez simplement le Host: localhost Port: 8000 // ou celui que vous utilisez

enter image description here

Cliquez sur OK

Partie 2 Installer l'assistant Xdebug Chrome

enter image description here

Dans le navigateur Chrome, il devrait y avoir une icône de bogue dans le coin supérieur droit Cliquez dessus et choisissez Déboguer pour que l'icône de bogue grise change de couleur en vert

enter image description here

Maintenant, lorsque vous exécutez php artisan serve et définissez un point de contrôle de débogage

enter image description here

et cliquez sur l'icône du téléphone pour "Commencer à écouter la connexion Xdebug"

enter image description here

il devrait attraper votre point de contrôle de débogage

1
lewis4u