了解消息 "Cannot accept external Xdebug connection: Cannot evaluate expression 'isset($_SERVER['PHP_IDE_CONFIG'])'"
Understanding message "Cannot accept external Xdebug connection: Cannot evaluate expression 'isset($_SERVER['PHP_IDE_CONFIG'])'"
我使用 PHPstorm 作为我的主要 PHP 开发环境和 XDebug 来调试我的应用程序。
我唯一的问题是消息 "Cannot accept external Xdebug connection: Cannot evaluate expression 'isset($_SERVER['PHP_IDE_CONFIG'])'" 不时出现。
我已经看到了问题的一些解决方案 and also in the JetBrains support (here and here),但我的问题有点不同,因为我可以正常调试,但消息继续出现。
请参阅下面的事件日志打印件。显然,该消息每 30 分钟出现一次。
仅供参考,我正在调试 Web 服务,因此,我将 Xdebug 配置为侦听所有 HTTP 请求,我单击 "Start Listen PHP Debug Connections button"(图中绿色),然后通过 Advannced Rest Client 启动请求( Chrome).
正如我所说,我可以毫无问题地调试,所以我只是想了解消息。它会引起任何问题吗?难道我做错了什么?我可以禁用此消息吗?怎么样?
我尝试了链接问题中的解决方案,但消息仍然存在。
这是我的 Xdebug 配置:
[Zend]
zend_extension="/usr/lib/php5/20131226/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_autostart=1
xdebug.remote_connect_back=0
您的描述(重复性任务)+ 屏幕截图(恰好每 30 分钟发生一次)表明您有一些任务按某个计划执行(系统范围的计划程序——在您的 Linux 案例中为 cron)并且它是用 PHP 编写(PHP 脚本直接由调度程序调用或作为主任务中的步骤之一调用)。
此类任务在 CLI 环境中执行(或者,对于您的情况,更好的措辞,而不是 运行 在实际 Web 服务器的上下文中)。当 PhpStorm 收到传入的调试请求(在 IDE 之外发起)时,它需要一些信息来确定要使用的设置(要使用 PHP | Servers
条目中的哪个)。当 PHP 在 Web 服务器上下文中执行时,此类信息通常(大多数情况)已经存在,而在终端 (CLI) 中执行时不存在,因此您必须 provide it manually.
最简单的解决方案是 在 Settings/Preferences | Languages & Frameworks | PHP | Debug
启用 Ignore external connections through unregistered server configurations
选项。请注意,如果您需要配置另一个服务器配置(对于大多数项目来说这种情况很少发生),您将不得不手动执行或禁用此选项,如果您需要 IDE.
的帮助
Cronjob 是重复性的实际原因。这里的另一个问题是 xdebug actually 试图调试它。 理想情况下 它根本不应该发生,您最好以这样的方式配置您的环境,即正常任务使用正常 PHP 安装(没有 xdebug)并且开发环境使用单独的 PHP 安装或至少使用单独的 php.ini 配置。仅启用 xdebug 就已经使脚本 运行 慢了 2 倍左右,例如,composer
会在检测到启用 xdebug 时通知您。
你有 xdebug.remote_autostart=1
。使用此 xdebug 尝试调试 它执行的每个 PHP 脚本 。我知道你已经启用它来简化你的开发生活(因为有时很难和不方便以其他方式传递 xdebuger "debug this now" 标志(例如 cookie 或 GET/POST 参数))但正如你所看到的那样导致一些不便。
此处可能的选项之一(除了上述单独的配置之外)是 xdebug.remote_autostart=0
并在您的实际 PHP 代码(编程断点)中使用 xdebug_break();
。但这可能由于其他原因不方便——需要修改脚本源代码才能enable/disable调试。
正如其他人所提到的,这是由 sessionclean
脚本(在我的机器上,它位于:/usr/lib/php/sessionclean
)引起的,该脚本每 30 分钟被 cron 调用一次。
如果您想在系统上保留 xdebug.remote_autostart=1
同时阻止 sessionclean
启动远程调试连接,只需编辑 sessionclean
(这是一个简单的 shell 脚本)和将 -d "xdebug.remote_autostart=0"
添加到对 php
命令的调用中。
例如,在我的系统上我必须更改这一行:
session_config=$(PHP_INI_SCAN_DIR=/etc/php/${version}/${conf_dir}/conf.d/ php${version} -c /etc/php/${version}/${conf_dir}/php.ini -d "error_reporting='~E_ALL'" -r 'foreach(ini_get_all("session") as $k => $v) echo "$k=".$v["local_value"]."\n";')
进入这个:
session_config=$(PHP_INI_SCAN_DIR=/etc/php/${version}/${conf_dir}/conf.d/ php${version} -c /etc/php/${version}/${conf_dir}/php.ini -d "xdebug.remote_autostart=0" -d "error_reporting='~E_ALL'" -r 'foreach(ini_get_all("session") as $k => $v) echo "$k=".$v["local_value"]."\n";')
我使用 PHPstorm 作为我的主要 PHP 开发环境和 XDebug 来调试我的应用程序。
我唯一的问题是消息 "Cannot accept external Xdebug connection: Cannot evaluate expression 'isset($_SERVER['PHP_IDE_CONFIG'])'" 不时出现。
我已经看到了问题的一些解决方案
请参阅下面的事件日志打印件。显然,该消息每 30 分钟出现一次。
仅供参考,我正在调试 Web 服务,因此,我将 Xdebug 配置为侦听所有 HTTP 请求,我单击 "Start Listen PHP Debug Connections button"(图中绿色),然后通过 Advannced Rest Client 启动请求( Chrome).
正如我所说,我可以毫无问题地调试,所以我只是想了解消息。它会引起任何问题吗?难道我做错了什么?我可以禁用此消息吗?怎么样?
我尝试了链接问题中的解决方案,但消息仍然存在。
这是我的 Xdebug 配置:
[Zend]
zend_extension="/usr/lib/php5/20131226/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_autostart=1
xdebug.remote_connect_back=0
您的描述(重复性任务)+ 屏幕截图(恰好每 30 分钟发生一次)表明您有一些任务按某个计划执行(系统范围的计划程序——在您的 Linux 案例中为 cron)并且它是用 PHP 编写(PHP 脚本直接由调度程序调用或作为主任务中的步骤之一调用)。
此类任务在 CLI 环境中执行(或者,对于您的情况,更好的措辞,而不是 运行 在实际 Web 服务器的上下文中)。当 PhpStorm 收到传入的调试请求(在 IDE 之外发起)时,它需要一些信息来确定要使用的设置(要使用 PHP | Servers
条目中的哪个)。当 PHP 在 Web 服务器上下文中执行时,此类信息通常(大多数情况)已经存在,而在终端 (CLI) 中执行时不存在,因此您必须 provide it manually.
最简单的解决方案是 在 Settings/Preferences | Languages & Frameworks | PHP | Debug
启用 Ignore external connections through unregistered server configurations
选项。请注意,如果您需要配置另一个服务器配置(对于大多数项目来说这种情况很少发生),您将不得不手动执行或禁用此选项,如果您需要 IDE.
Cronjob 是重复性的实际原因。这里的另一个问题是 xdebug actually 试图调试它。 理想情况下 它根本不应该发生,您最好以这样的方式配置您的环境,即正常任务使用正常 PHP 安装(没有 xdebug)并且开发环境使用单独的 PHP 安装或至少使用单独的 php.ini 配置。仅启用 xdebug 就已经使脚本 运行 慢了 2 倍左右,例如,composer
会在检测到启用 xdebug 时通知您。
你有 xdebug.remote_autostart=1
。使用此 xdebug 尝试调试 它执行的每个 PHP 脚本 。我知道你已经启用它来简化你的开发生活(因为有时很难和不方便以其他方式传递 xdebuger "debug this now" 标志(例如 cookie 或 GET/POST 参数))但正如你所看到的那样导致一些不便。
此处可能的选项之一(除了上述单独的配置之外)是 xdebug.remote_autostart=0
并在您的实际 PHP 代码(编程断点)中使用 xdebug_break();
。但这可能由于其他原因不方便——需要修改脚本源代码才能enable/disable调试。
正如其他人所提到的,这是由 sessionclean
脚本(在我的机器上,它位于:/usr/lib/php/sessionclean
)引起的,该脚本每 30 分钟被 cron 调用一次。
如果您想在系统上保留 xdebug.remote_autostart=1
同时阻止 sessionclean
启动远程调试连接,只需编辑 sessionclean
(这是一个简单的 shell 脚本)和将 -d "xdebug.remote_autostart=0"
添加到对 php
命令的调用中。
例如,在我的系统上我必须更改这一行:
session_config=$(PHP_INI_SCAN_DIR=/etc/php/${version}/${conf_dir}/conf.d/ php${version} -c /etc/php/${version}/${conf_dir}/php.ini -d "error_reporting='~E_ALL'" -r 'foreach(ini_get_all("session") as $k => $v) echo "$k=".$v["local_value"]."\n";')
进入这个:
session_config=$(PHP_INI_SCAN_DIR=/etc/php/${version}/${conf_dir}/conf.d/ php${version} -c /etc/php/${version}/${conf_dir}/php.ini -d "xdebug.remote_autostart=0" -d "error_reporting='~E_ALL'" -r 'foreach(ini_get_all("session") as $k => $v) echo "$k=".$v["local_value"]."\n";')