macOS 10.13 上的 Xdebug PHP 7

Xdebug on macOS 10.13 with PHP 7

所以 macOS High Sierra 10.13 现在附带 PHP 7.1。在配置 Apache 时,我还从 /etc/php.ini.default 文件创建了一个新的 /etc/php.ini,确保在重新启动 Apache 后检查 PHP 正在加载它,但是附带的 Xdebug 扩展版本当您 运行 phpinfo();

时,macOS 10.13 似乎无法加载或显示

我的 php.ini 肯定正在加载:

$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

这是我配置 Xdebug 的 /etc/php.ini 的样子:

[xdebug]    
zend_extension = "/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so"
xdebug.remote_enable=on
xdebug.remote_log="/var/log/xdebug.log"
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.remote_port=9000

[更新,修正了这里的错字...]

但是,Xdebug 没有加载并且检查 php -i 没有结果:

$php -i | grep xdebug
PHP Warning:  Method xdebug_start_function_monitor() cannot be a NULL 
    function in Unknown on line 0
    PHP Warning:  xdebug: Unable to register functions, unable to load in Unknown on line 0
    Segmentation fault: 11

是的,文件路径是正确的:

$ ls /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so*

这曾经在 PHP 5 上有效,所以我希望有人能帮助我和其他任何人在未来努力解决这个问题。

当我检查我的 apache 日志时,出现以下错误:

Failed loading /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so:  dlopen(/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so, 9): Symbol not found: _xdebug_monitored_function_dtor
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
  Expected in: flat namespace
 in /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so

我在了解如何解决此错误方面没有取得进展:

Symbol not found: _xdebug_monitored_function_dtor

您在 "zend_extention" 中打错了字。这应该是 zend_extension。 我认为完整路径是不必要的 zend_extension=xdebug.so 应该够了

好的,我终于搞定了 运行 我自己,它工作得很好!我假设 macOS High Sierra 附带的 xdebug 二进制文件(位于:/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so)与 PHP7 的新 Zend 引擎不兼容。

所以我从 xdebug website 下载了最新的源代码并执行了以下操作:

  1. 用 brew 安装了 autoconf;
  2. 运行 phpize 为新的 Zend 引擎配置构建;
  3. 运行 ./configure
  4. 运行 make

现在新的二进制文件在 modules/xdebug.so

但是 macOS 系统完整性保护 (SIP) 将阻止您覆盖 /usr/lib/php/extensions/ 下的 xdebug.so。我不想禁用它,所以我在 /usr/local/lib/php/extensions/ 下创建了一个新的目录路径,并将新的二进制文件复制到这个位置。我不确定这个目录是否是放置它的最佳位置,或者这是否是一种不好的做法,但它对我有用。

最后我重新配置了我的 php.ini 以使用新的二进制文件并且一切正常!

要安装它,您必须有 xcode 命令行工具。

所以你需要运行:

xcode-select --install

然后你需要安装autoconf:

brew install autoconf

然后你必须下载 code from here. 之后你必须在源代码的文件夹中 运行:

  1. phpize
  2. ./configure
  3. make
  4. sudo cp modules/xdebug.so /usr/local/php/extensions(如果该目录不存在,请创建它)

最后在 php.ini 内添加

zend_extension=/usr/local/php/extensions/xdebug.so

之后您可以在 php.ini 中启用 xdebug 并重新启动 apache

sudo apachectl restart

对于任何迟到的人来说,这个问题的最初尝试似乎在 macOS 10.13.6 中工作得很好

大家好,在 Mac 上尝试安装 xDebug 时遇到错误。

error: unknown type name 'uint64_t'

您的 local/bin/include 中存在导致此错误的文件。通过删除它们,您可以摆脱错误。不过,您可能需要重新安装 brew。

https://github.com/cython/cython/issues/2009

如果您在 Mac OS X mojave 上安装了多个 PHP 版本的 brew,即 7.1、7.2 和 7.3,您可以执行以下操作:

  1. 用 brew 安装 autoconf brew install autoconf.

  2. 更改为您想要 Xdebug 的 PHP 版本,运行 brew unlink php@7.1 && brew link --force --overwrite php。这将从 PHP 7.1 切换到 PHP 7.3.

  3. xdebug 网站下载最新的 Xdebug 源。

  4. 解压 Xdebug tar 并导航到解压目录,您会在其中看到所有文件。

  5. 运行 phpize 为新的 Zend 引擎配置构建。

  6. 运行 ./configure.

  7. 运行 make.

  8. Xdebug 扩展 xdebug.somodules 目录中编译。

  9. /usr/local/lib/php/7.3.1/extensions/下新建目录路径,复制xdebug.so到该位置。在这里,7.3.1 是我之前切换的当前版本,更改它以匹配您的 PHP 版本。

  10. 在编辑器中打开 php.ini 并输入 zend_extension="/usr/local/lib/php/7.3.1/extensions/xdebug.so" 然后保存更改。

  11. 运行 php -v 它会显示 Xdebug 已正确配置。

如果你想在另一个 PHP 版本上配置 Xdebug,那么只需从第 2 步一直重复到第 11 步。如前所述 post,这样你就不需要 disable/enable Mac OS X.

上的系统完整性保护