【问题标题】:IntelliJ PHP debugger not connectingIntelliJ PHP 调试器未连接
【发布时间】:2016-12-02 23:33:09
【问题描述】:

我已经在我的 Mac 上设置了 php 5.6 和 Apache,并安装了带有 php 插件的 IntelliJ (2016.2)。问题是 IDE 不想连接到本地服务器。

我在 php.ini 中添加了以下几行:

[xdebug]
zend_extension=/usr/local/Cellar/php56/5.6.24/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_port = "9000"

当我运行 php -v 时,我得到:

Zend Engine v2.6.0,版权所有 (c) 1998-2016 Zend Technologies 使用 Xdebug v2.4.0,版权所有 (c) 2002-2016,由 Derick Rethans 提供

phpinfo() 显示

xdebug.remote_enable 开启
xdebug.remote_port 9000 9000

但 IntelliJ 显示:

xdebug.remote_enable 0

我已经检查过,我指向了正确的php.ini(在编辑文件时会出现检查过的路径和其他更改)。

我尝试了所有配置(包括使用 IDE 密钥),但似乎没有任何效果。

有没有办法可以检查调试是否真的正常工作(即是 IDE 无法识别某些东西还是服务器出现故障),因为此时我不知道问题可能是什么。

【问题讨论】:

  • “问题是 IDE 不想连接到本地服务器” 你说的到底是什么意思?如果是关于 PHP 调试 .. 那么 IDE 从不 连接到本地服务器(或其他)。它是 xdebug 连接到调试客户端(在我们的例子中是 IDE)。请检查它是如何工作的:xdebug.org/docs/remote
  • "并且当我运行 php -v 我得到:" 在一些 Mac 设置(例如 MAMP)以及大多数 Linux 发行版上,PHP 将使用一个 php.ini 进行 CLI和 Apache 将使用不同的一种。因此——如果你想调试网页(通过浏览器),那么你需要检查通过浏览器捕获的phpinfo() 输出......你可能会看到使用了不同的 php.ini。 "But IntelliJ shows: xdebug.remote_enable 0" 部分只是证实了这一点(至少在那个方向上给出了非常强烈的提示)。
  • 好吧,我已经添加了 phpinfo() 显示的内容(它是通过浏览器显示的),IDE 会显示它正在使用哪个 php.ini。 “它没有连接”我的意思是,当我启动调试器时,它没有遇到任何问题,当我启动/停止本地服务器时它也没有显示任何错误
  • 只是为了 100% 清楚:1) 请提供通过浏览器捕获的phpinfo() 输出(实际配置之前的所有内容)的标题 2) xdebug 部分。
  • 还有——你是如何安装 PHP 的?它可能与其他事物发生冲突。请 1) 为此类不成功的调试会话收集 xdebug 日志xdebug.org/docs/all_settings#remote_log 2) 显示sudo lsof -nP -iTCP -sTCP:LISTEN 的结果。您有可能在您的计算机上运行 php-fpm ......它使用 TCP 9000 - 与 xdebug 相同的端口 - #2 应该澄清这一点。在这种情况下——在 IDE 和 php.ini 中将 xdebug 端口更改为 9001(或类似)应该可以解决问题。

标签: php macos debugging intellij-idea phpstorm


【解决方案1】:

最好的方法是为这种不成功的调试会话收集xdebug log,看看它要说什么。有时调试对您不起作用(IDE 没有反应),但 xdebug 实际上可以很好地连接到某个地方(例如,另一个服务 .. 如下所述)。

您有可能在您的计算机上运行php-fpm(这取决于您如何安装PHP——您为此使用了什么工具)。默认情况下,php-fpm 使用与 xdebug 相同的 TCP 9000 端口。

sudo lsof -nP -iTCP -sTCP:LISTEN

在终端中运行这个命令——它应该告诉(在9000关键字过滤结果之后)哪些服务已经在那个端口上监听。

如果确实是php-fpm .. 则在两个IDE 设置+ php.ini 中将xdebug 端口从默认9000 更改为任何其他(例如9001 或任何其他通常未使用的端口)将解决问题。

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 2023-03-15
    • 2015-02-14
    • 2014-09-28
    • 1970-01-01
    • 2018-09-16
    • 2011-06-11
    • 2017-10-29
    • 1970-01-01
    相关资源
    最近更新 更多