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!
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:
Définissez les valeurs:
localhost
8000
Use route script
et sélectionnez server.php
dans Laravel projette le répertoire racine.-dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_Host=127.0.0.1
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"
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.
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 server
ne 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:
Run
> Edit Configurations
et donnez n'importe quel nom ou laissez-le simplement Sans nom...
après l'option Server:+
et donnez n'importe quel nom (par exemple Laravel App)localhost
, Port comme 8000
and Debugger as Xdebug
et laissez toutes les autres coches décochées!Apply
/OK
\user
)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!
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
Cliquez sur OK
Partie 2 Installer l'assistant Xdebug Chrome
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
Maintenant, lorsque vous exécutez php artisan serve et définissez un point de contrôle de débogage
et cliquez sur l'icône du téléphone pour "Commencer à écouter la connexion Xdebug"
il devrait attraper votre point de contrôle de débogage