经过近 24 小时的苦苦运行,试图让 xdebug 与 Netbeans 8.0.2 一起工作,我找到了一个解决方案,我希望它适用于所有 Ubuntu 和 Ubuntu 相关堆栈。
问题一:PHP和xdebug版本必须兼容
有时,如果您正在运行 Linux 设置并 apt-get 安装 xdebug,它不会为您提供正确的 xdebug 版本。就我而言,我有最新的 php 版本,但有一个旧的 xdebug 版本。那一定是由于我当前的 Xubuntu 版本。软件版本取决于存储库,而存储库又取决于您正在运行的操作系统版本。
解决方案:PHP 有一个简洁的扩展管理器,称为 PECL。按照此处给出的说明启动并运行它。首先,正如评论中的一位成员所指出的,您应该安装 PHP 的开发人员包以使 PECL 工作:
sudo apt-get install php5-dev
然后,使用 PECL,您将能够安装最新的稳定版本的 xdebug:
sudo pecl install php5-xdebug
完成后,将安装正确版本的 xdebug,但尚未准备好使用。之后,您需要启用它。我已经看到了很多关于如何做到这一点的建议,但事实是 PHP 需要为客户端和服务器启用一些模块,在本例中为 Apache。似乎这里的最佳实践是使用启用模块的内置方法,称为 php5enmod。用法在此处描述。
问题二:正确启用模块
首先,您需要进入 /etc/php5 文件夹。在那里,您会找到 3 个文件夹,apache2、cli 和 mods_available。mods_available 文件夹包含带有激活给定模块的说明的文本文件。命名约定是 [module].ini。看看其中的几个,看看它们是如何设置的。
现在您必须在 mods_available 文件夹中创建您的 ini 文件。创建一个名为 xdebug.ini 的文件,并在该文件中粘贴以下内容:
[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
确保存在指令[xdebug],与上面的示例完全相同。模块必须工作。事实上,只需复制并粘贴整个代码,这样你就会成为一个更快乐的人。:D
注意:zend_extension 路径非常重要。在本例中,它指向 PHP 引擎的当前版本,但您应该首先转到 /usr/lib/php5 并确保以数字命名的文件夹是正确的。将名称调整为您在那里看到的任何内容,当您使用它时,检查文件夹内部以确保 xdebug.so 确实存在。它应该是,如果你做的一切正确。
现在,随着您的 xdebug.ini 创建,是时候启用该模块了。为此,请打开控制台并键入:
php5enmod xdebug
如果一切顺利,PHP 会创建两个指向该文件的链接,一个在 /etc/php5/apache2/conf.d 中,另一个在 /etc/php5/cli/conf.d 中
重新启动 Apache 服务器并在控制台上输入:
php -v
你应该得到这样的东西:
PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.3.1, Copyright (c) 2002-2015, by Derick Rethans
这意味着 PHP 客户端确实读取了您的 xdebug.ini 文件并加载了 xdebug.so 模块。到现在为止还挺好。
现在在您的 Web 服务器上的某处创建一个 phpinfo 脚本,然后运行它。如果一切顺利,这就是你应该看到的:
如果你看到这个,Apache 也加载了这个模块,你可能已经准备好了。现在让我们看看 Netbeans 是否能正确调试。创建一个非常简单的脚本,添加一些变量,给它们赋值,并在它们上设置一个断点。现在点击 CTRL+F5,点击调试器面板上的“step in”,看看你是否得到这样的结果:
请记住在工具/选项/php 下检查 Netbeans 配置以进行调试。它应该看起来像这样:
我希望这能对这个相当模糊、令人困惑的问题有所了解。
最良好的祝愿!