Pregunta

Estoy usando Eclipse y XDebug para desarrollar una aplicación PHP que se basa en los servicios web. Tengo páginas de prueba que consumen mis servicios de 2 maneras:. AJAX (jQuery) y el rizo

añado puntos de interrupción a mi página de servicio e inicie el depurador. Cuando llamo al servicio de AJAX, la ejecución se detiene en el punto de ruptura muy bien, y me da mi variables, paso a paso de control, etc.

Pero cuando llamo al servicio utilizando CURL (es decir, desde dentro de una página PHP), los puntos de interrupción no funcionan. Incluso si enciendo la opción de depurador "Break en primera línea", no puedo conseguir la ejecución de detener al usar cURL.

¿Es un comportamiento depurador? ¿Es necesario añadir un Hearder a mis llamadas CURL? Alterar la URL? O se trata de una limitación XDebug?

Gracias por su tiempo y esfuerzo, Guy

¿Fue útil?

Solución

No puedo comentar todavía, así que publicar esto como una respuesta.

Se puede depurar más de una petición AJAX en una sola sesión? Fue la sesión de depuración todavía se está ejecutando en Eclipse cuando intentó depurar usando CURL?

La descripción sobre cómo funciona para mí:

  1. Iniciar sesión de depuración con un archivo debug.php simple que contiene sólo una <?php y nada más. Se detiene en la primera línea, que "continuar" y termina la ejecución.
  2. Ahora solicitar el guión usando CURL (u otro navegador) añadir? XDEBUG_SESSION_START = ECLIPSE_DBGP a su paso (incluso creo esta adición es opcional)
  3. La secuencia de comandos debe aparecer en la vista de depuración se detuvo en la primera línea

THS Hope ayuda.

Otros consejos

Aquí es consejo sobre cómo activar el cliente Xdebugger de rizo sin navegador:

1- Desde la línea de comandos:

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

2- Desde 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);
?>

Así que no importa si adjunta "XDEBUG_SESSION = 1" para rizar el URL, pero lo que hay que hacer es enviar una cookie adecuada junto con la solicitud.

Sé que esto es un hilo bastante viejo, pero yo pensé que había puesto mi experiencia para otros que pueden venir a través de ella, como lo hice, con el mismo problema. Lo que descubrí es que, si se depura de forma remota (que siempre lo hago), hay un par de ajustes que tienen que cambiar en php.ini para hacer este trabajo. Éstos son los que trabajaron para mí:

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

El primer parámetro es normalmente "verdad", y le dice a Xdebug a buscar al cliente en la misma dirección IP en el que se originó la solicitud HTTP. En este caso, sin embargo, la solicitud proviene del servidor, por lo que no va a funcionar. En su lugar debe utilizar el segundo ajuste para indicar Xdebug dónde se encuentra el cliente. Esperamos que esto ayude a salvar a alguien un poco de tiempo!

Para activar el depurador la solución más sencilla es utilizar el enfoque de galletas -b XDEBUG_SESSION=ECLIPSE_DBGP trabajado para mí en eclipse, véase a continuación:

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

Cuando se está depurando la petición Ajax, que uno es enviado por el navegador, en el mismo contexto de navegación como los demás (no-Ajax) peticiones - que es por qué funciona bien <. / p>


La solicitud enviada por el enrollamiento está en otra, diferente, contexto - y no estoy seguro de que pueda conectar el depurador en que ... Pero, tal vez ...

En primer lugar, he aquí una información que podría ser útil, citando el de Xdebug documentación :

  

Xdebug contiene funcionalidad para mantener   seguimiento de una sesión de depuración cuando comenzó   a través de un navegador: cookies. Esto funciona   de esta manera:

     
      
  • Cuando la variable URL es XDEBUG_SESSION_START=name   anexionado a un URL Xdebug emite una   cookie con el nombre   "XDEBUG_SESSION" y como valor de la   valor de la XDEBUG_SESSION_START   parámetro de la URL.
  •   
  • Cuando hay un GET (o POST) XDEBUG_SESSION_START variable o el   galletas XDEBUG_SESSION se establece, Xdebug   intentará conectarse a un debugclient.
  •   
  • Para detener una sesión de depuración (y destruir la cookie) sólo tiene que añadir la URL   XDEBUG_SESSION_STOP parámetro.   Xdebug entonces ya no tratar de hacer   una conexión con el debugclient.
  •   

Tal vez podría funcionar si se establece esa cookie "a mano", enviándolo allong la solicitud rizo ...

supongo que primero tendría que obtener su valor, según lo establecido por Xdebug al comienzo de la sesión de depuración -. Re-uso de la cookie que tiene en su navegador debe ser posible, aunque

Nota: Nunca he intentado esto - si se intenta, y funciona, ¿podría confirmar que funcionó

?

Me encontré con este mismo problema exacto. Lo resuelto girando la función de inicio automático de en el php.ini:

xdebug.remote_autostart = 0

y luego añadir la clave de API a la URL de servicio web que llama a mi cliente de servicio web:

?XDEBUG_SESSION_START=<your API key here>

y no estoy seguro de si esto es importante, pero entró en la clave de API en mi depurador (MacGDBp). Ahora el depurador dispara sólo cuando la secuencia de comandos del lado del servidor webervice se llama, no cuando se inicia el cliente.

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top