para - PhpStorm no recibe conexiones xdebug: registro de eventos de PhpStorm: no se puede evaluar la expresión ''isset($_SERVER['' PHP_IDE_CONFIG ''])''
xdebug ini phpstorm (7)
Configuré todo para que PhpStorm y xdebug funcionen, estoy ejecutando Ubuntu 14.04.
la conexión de vuelta al IDE no está establecida, y recibo esto en el registro de eventos del IDE
No se puede aceptar la conexión externa de Xdebug: No se puede evaluar la expresión ''isset ($ _ SERVER ['' PHP_IDE_CONFIG ''])'' - Osama Salama Hace 13 minutos
Reuniré los valores de configuración que configuré en varios lugares. Como no puedo averiguar dónde está el problema.
php.ini
zend_extension = /usr/lib/php5/20121212/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
xdebug.remote_connect_back = 1
xdebug.remote_autostart = 1
xdebug.remote_log=xxx/xdebug.log
xdebug.IDE_key=PHPSTORM
Información de PHP
xdebug
xdebug support enabled
Version 2.3.1
IDE Key PHPSTORM
Supported protocols Revision
DBGp - Common DeBuGger Protocol $Revision: 1.145 $
Directive Local Value Master Value
xdebug.auto_trace Off Off
xdebug.cli_color 0 0
xdebug.collect_assignments Off Off
xdebug.collect_includes On On
xdebug.collect_params 0 0
xdebug.collect_return Off Off
xdebug.collect_vars Off Off
xdebug.coverage_enable On On
xdebug.default_enable On On
xdebug.dump.COOKIE no value no value
xdebug.dump.ENV no value no value
xdebug.dump.FILES no value no value
xdebug.dump.GET no value no value
xdebug.dump.POST no value no value
xdebug.dump.REQUEST no value no value
xdebug.dump.SERVER no value no value
xdebug.dump.SESSION no value no value
xdebug.dump_globals On On
xdebug.dump_once On On
xdebug.dump_undefined Off Off
xdebug.extended_info On On
xdebug.file_link_format no value no value
xdebug.force_display_errors Off Off
xdebug.force_error_reporting 0 0
xdebug.halt_level 0 0
xdebug.idekey no value no value
xdebug.max_nesting_level 256 256
xdebug.max_stack_frames -1 -1
xdebug.overload_var_dump On On
xdebug.profiler_aggregate Off Off
xdebug.profiler_append Off Off
xdebug.profiler_enable Off Off
xdebug.profiler_enable_trigger Off Off
xdebug.profiler_enable_trigger_value no value no value
xdebug.profiler_output_dir /tmp /tmp
xdebug.profiler_output_name cachegrind.out.%p cachegrind.out.%p
xdebug.remote_autostart On On
xdebug.remote_connect_back On On
xdebug.remote_cookie_expire_time 3600 3600
xdebug.remote_enable On On
xdebug.remote_handler dbgp dbgp
xdebug.remote_host 127.0.0.1 127.0.0.1
xdebug.remote_log /home/nautilus/Desktop/xdebug.log /home/nautilus/Desktop/xdebug.log
xdebug.remote_mode req req
xdebug.remote_port 9000 9000
xdebug.scream Off Off
xdebug.show_exception_trace Off Off
xdebug.show_local_vars Off Off
xdebug.show_mem_delta Off Off
xdebug.trace_enable_trigger Off Off
xdebug.trace_enable_trigger_value no value no value
xdebug.trace_format 0 0
xdebug.trace_options 0 0
xdebug.trace_output_dir /tmp /tmp
xdebug.trace_output_name trace.%c trace.%c
xdebug.var_display_max_children 128 128
xdebug.var_display_max_data 512 512
xdebug.var_display_max_depth 3 3
También validé el env de depuración remota. está todo bien. https://www.jetbrains.com/phpstorm/help/validating-the-configuration-of-a-debugging-engine.html que también salió bien.
El último recurso posible es el archivo de registro xdebug:
Log opened at 2015-03-13 14:39:01
I: Checking remote connect back address.
W: Remote address not found, connecting to configured address/port: 127.0.0.1:9000. :-|
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="dbgp://stdin" language="PHP" protocol_version="1.0" appid="4474"><engine version="2.3.1"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2015 by Derick Rethans]]></copyright></init>
<- feature_set -i 1 -n show_hidden -v 1
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1" feature="show_hidden" success="1"></response>
<- feature_set -i 2 -n max_depth -v 1
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_depth" success="1"></response>
<- feature_set -i 3 -n max_children -v 100
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="3" feature="max_children" success="1"></response>
<- status -i 4
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="status" transaction_id="4" status="starting" reason="ok"></response>
<- step_into -i 5
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="step_into" transaction_id="5" status="stopping" reason="ok"></response>
<- eval -i 6 -- aXNzZXQoJF9TRVJWRVJbJ1BIUF9JREVfQ09ORklHJ10p
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="eval" transaction_id="6"><error code="5"><message><![CDATA[command is not available]]></message></error></response>
Log closed at 2015-03-13 14:39:01
La depuración de un archivo llamado « test.php » en IntelliJ IDEA / PhpStorm puede ocasionar la falla de « No se puede evaluar la expresión '' isset($_SERVER[''PHP_IDE_CONFIG''])
'' ».
Use otro nombre para el archivo.
Otra cosa es asegurarse de deshabilitar cualquier servidor de seguridad que tenga y que pueda bloquear las conexiones remotas.
Para cualquier persona que llegue a este problema, hay otra opción de configuración potencial que podría estar perdiendo.
Asegúrese de que ha configurado correctamente su servidor para utilizar la asignación de ruta correcta entre sus archivos locales y remotos.
Por ejemplo, si la raíz de su sitio se monta localmente en /home/foo/www/mysite
pero se instala en el servidor en /www/mysite
, deberá editar la configuración de su servidor en PHPStorm para usar mapeos de ruta (simplemente ingrese /www/mysite
en la casilla junto a /home/foo/www/mysite
).
Recientemente tuve el mismo problema al intentar depurar usando PHPStorm
en nginx
y php-fpm
, en mi caso esto no estaba relacionado con xdebug
, nginx
o php-fpm config
, eran las asignaciones de ruta en phpstorm
que faltaban.
Inicialmente, PHPStorm
le notificará cuando no pueda asignar un archivo en el servidor a un archivo de origen local; sin embargo, si tiene una asignación a los primeros archivos afectados (normalmente index.php
o algo así) pero no puede asignar un archivo utilizado en una etapa posterior (En mi caso, este fue el autocargador en el directorio de proveedores de un proyecto que usa compositor), luego PHPStorm
no podrá depurar más y la depuración se detendrá.
Para corregir esto en PHPStorm
vaya a settings/Languages & Frameworks/PHP/Servers
y asegúrese de que la raíz de su proyecto se asigne correctamente a su directorio de contraparte en el servidor.
PHPStorm
debería poder mapear todos los archivos en su proyecto y la depuración debería continuar.
Espero que esto ayude.
También el mismo error si no pudo establecer la variable de entorno en docker-compose.yml
para la configuración de su área de trabajo:
workspace: build: environment: - PHP_IDE_CONFIG=${PHP_IDE_CONFIG}
También tuve este problema e intenté todos los trucos que pude encontrar, pero nada funcionó. Para mí, la depuración funciona la mayor parte del tiempo, pero a veces simplemente deja de funcionar con el mensaje: "No se puede aceptar la conexión externa de Xdebug: No se puede evaluar la expresión ''isset ($ _ SERVER ['' PHP_IDE_CONFIG ''])" "
Así que finalmente me di cuenta de que tenía un error de compilación en mi código (nombre del método mal escrito: PhpStorm no siempre informa de estas cosas, al menos en mi configuración). Tan pronto como corregí el error, la depuración comenzó a funcionar nuevamente. Tal vez esto puede ayudar a alguien que lucha.
Aunque todavía tengo problemas con puntos de interrupción que no son alcanzados, puedo lanzar un "xdebug_break ();" La línea en el código y la depuración se vuelve más confiable. La desventaja de usar xdebug_break en lugar de puntos de interrupción es (aparte del hecho de que es más trabajo que solo agregar un punto de interrupción) las variables locales que no se muestran en el depurador de PhpStorm por alguna razón (solo se muestran los globales). Eso hace que la depuración sea menos conveniente, pero al menos puedo hacer que funcione.
Aparentemente no puedes tener todo :) Desde el mundo de Java, una buena depuración es algo que he podido dar por sentado, pero ahora me he dado cuenta de lo mal estado que he estado :)
Tuve exactamente el mismo error en PhpStorm que el OP.
Esta respuesta a una pregunta diferente me solucionó el problema, pero me gustaría agregar más detalles en mi propia respuesta.
El problema principal fue mal cargado xdebug. Los problemas de mapeo del servidor mencionados en otras respuestas no fueron un problema para mí.
Si carga su página phpinfo()
y encuentra la sección xdebug, y ve esto:
XDEBUG NO SE CARGA COMO EXTENSION ZEND
¡Entonces tienes que arreglar eso antes de intentar cualquier otra cosa! Pero a veces esto puede requerir cierto trabajo para rastrearlo, si tiene varios archivos php.ini
.
También en su página phpinfo()
, busque "php.ini", (debería estar justo en la parte superior) y vea su "Ruta del archivo de configuración (php.ini)" y su "Archivo de configuración cargado". Esos son donde tu xdebug puede estar cargando.
En mi caso, lo cargué correctamente como una extensión Zend en mi archivo de configuración principal en /usr/local/lib/php.ini, así:
zend_extension = "/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so"
Pero en mi archivo de configuración cargada en /home/someuser/public_html/php.ini, lo cargué incorrectamente así:
extension=xdebug.so
Después de arreglar eso, la depuración remota con PhpStorm está funcionando de nuevo para mí.
Como nota al margen, el primer error que vi en PhpStorm fue exactamente el mismo que el OP menciona, y esto es lo que parece:
Cannot accept external Xdebug connection
Cannot evaluate expression ''isset($_SERVER[''PHP_IDE_CONFIG''])''
(Al principio pensé que, debido a que la extensión no se cargaba correctamente, PhpStorm no podía ejecutar el código PHP en el servidor. Pero ahora creo que PhpStorm solo ejecuta el código php si configuró un intérprete, lo cual no es necesario para la depuración). Para la depuración, PhpStorm solo necesita la conexión xdebug y las asignaciones de ruta correctas.)
Más tarde, encontré el error "El comando no está disponible" en el registro de xdebug en mi servidor, lo que me llevó a la solución.
Por cierto, aquí está lo que tengo en mi php.ini
local para xdebug:
;extension=xdebug.so <- this is the bad line commented!
zend_extension = "/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so"
xdebug.remote_enable=true
xdebug.remote_port="9000"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp/xdebug-someuser/"
xdebug.profile_enable_trigger=1
xdebug.trace_enable_trigger=1
xdebug.idekey="PHPSTORM"
xdebug.remote_log="var/log/xdebug/xlog"