Question

J'utilise Eclipse et XDebug pour développer une application PHP qui repose sur les services Web. J'ai des pages de test qui consomment mes services de 2 façons:. AJAX (en utilisant jQuery) et cURL

ajouter des points d'arrêt sur ma page de service et lancer le débogueur. Quand j'appelle le service d'AJAX, l'exécution s'arrête bien au point d'arrêt, et je reçois mes variables, contrôle étape par étape, etc.

Mais quand je l'appelle le service à l'aide cURL (à savoir à partir d'une page PHP), les points d'arrêt ne fonctionnent pas. Même si je tourne sur le « Break à première ligne » option de débogage, je ne peux pas obtenir l'exécution d'arrêter lorsque vous utilisez cURL.

Est-ce un comportement de débogage? Ai-je besoin d'ajouter un Hearder à mes appels cURL? Modifier l'URL? Ou est-ce une limitation xdebug?

Merci pour votre temps et d'efforts, Guy

Était-ce utile?

La solution

Je ne peux pas commenter, donc je poster cela comme une réponse.

Pouvez-vous déboguer plus d'une requête AJAX en une seule session? Est-ce votre session de débogage en cours d'exécution encore dans Eclipse lorsque vous avez essayé de débogage en utilisant cURL?

Description de la façon dont il fonctionne pour moi:

  1. Lancer session de débogage avec un simple fichier debug.php qui ne contient qu'une <?php et rien d'autre. Il arrête sur la première ligne, vous « continuer » et il termine l'exécution.
  2. demandez maintenant le script en utilisant cURL (ou un autre navigateur) en ajoutant? XDEBUG_SESSION_START = ECLIPSE_DBGP son chemin (je pense même cet ajout est facultatif)
  3. Votre script devrait apparaître dans la vue de débogage arrêté à la première ligne

Espoir ths aide.

Autres conseils

Voici conseil sur la façon de déclencher le client Xdebugger de Curl sans navigateur:

1- De la ligne de commande:

curl -H "Cookie: XDEBUG_SESSION=1" http://YOUR-SITE.com/your-script.php

2- De PHP

<?php 
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_URL, 'http://YOUR-SITE.com/your-script.php');
curl_setopt ($ch, CURLOPT_COOKIE, 'XDEBUG_SESSION=1');
curl_exec ($ch);
?>

Il n'a pas d'importance si vous attachez « XDEBUG_SESSION = 1 » à CURL URL, mais ce qui est nécessaire est d'envoyer un cookie approprié avec demande.

Je sais que c'est un fil assez vieux, mais je pensais que je poste mon expérience pour d'autres qui peuvent venir à travers elle, comme je l'ai fait, avec le même problème. Ce que j'ai découvert est que, si vous êtes le débogage à distance (ce que je fais toujours), il y a des paramètres de couple que vous devez changer dans php.ini pour faire ce travail. Voici ceux qui ont travaillé pour moi:

xdebug.remote_connect_back = false
xdebug.remote_host = {client host name or IP}

Le premier paramètre est normalement « vrai » et dit xdebug de chercher le client à la même adresse IP à laquelle la requête HTTP origine. Dans ce cas cependant, la demande provient du serveur, de sorte que ne fonctionnera pas. Au lieu de cela, vous devez utiliser le second paramètre pour indiquer à xdebug où trouver le client. Espérons que cela aide à sauver quelqu'un un peu de temps!

Pour déclencher le débogueur la solution la plus simple est d'utiliser l'approche cookie -b XDEBUG_SESSION=ECLIPSE_DBGP travaillé pour moi sur Eclipse, voir ci-dessous:

curl  -H 'Content-type: application/json' \
      -b XDEBUG_SESSION="ECLIPSE_DBGP" \
      -X POST \
      -d '{"uid":200, "message":"asdsad","message_type":1}' 
      http://daxuebao.local:8083/api/message/send

Lorsque vous déboguez la requête Ajax, que l'on est envoyé par le navigateur, dans le même contexte de navigation que les autres (non-Ajax) demandes - ce qui explique pourquoi il fonctionne très bien <. / p>


La demande envoyée par boucle est dans un autre, différent, contexte - et je ne suis pas sûr que vous pouvez brancher le débogueur dans cette ... Mais, peut-être ...

Tout d'abord, voici une information qui pourrait se révéler utile, citant la documentation de la Xdebug :

  

Xdebug contient des fonctionnalités de garder   piste d'une session de débogage au démarrage   via un navigateur: cookies. Cela marche   comme ceci:

     
      
  • Lorsque la variable URL est XDEBUG_SESSION_START=name   jointe à une URL Xdebug émet un   cookie avec le nom   « XDEBUG_SESSION » et de la valeur en tant que   La valeur de la XDEBUG_SESSION_START   paramètre d'URL.
  •   
  • Quand il y a une XDEBUG_SESSION_START des variables GET (ou POST) ou   cookie XDEBUG_SESSION est défini, Xdebug   tente de se connecter à un DebugClient.
  •   
  • Pour arrêter une session de débogage (et de détruire le cookie) il suffit d'ajouter l'URL   paramètre XDEBUG_SESSION_STOP.   Xdebug ne sera alors plus essayer de faire   une connexion au DebugClient.
  •   

Peut-être que cela pourrait fonctionner si vous définissez ce cookie « à la main », l'envoyer allong la demande boucle ...

Je suppose que vous auriez d'abord obtenir sa valeur, fixée par Xdebug au début de la session de débogage -. Réutiliser le cookie que vous avez dans votre navigateur devrait être possible, bien que

Note: Je ne l'ai jamais essayé cela - si vous essayez, et il fonctionne, pourriez-vous s'il vous plaît confirmer travaillé

?

Je suis tombé sur cette même question exacte. Je l'ai résolu en tournant la fonction de démarrage automatique off dans le fichier php.ini:

xdebug.remote_autostart = 0

, puis en ajoutant la clé API à l'URL de webservice que mon client appelle webservice:

?XDEBUG_SESSION_START=<your API key here>

et je ne sais pas si cette question est importante, mais je suis entré dans la clé API dans mon débogueur (MacGDBp). Maintenant, le débogueur se déclenche uniquement lorsque le script côté serveur webervice est appelé, pas lorsque le client est démarré.

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top