15

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

我的 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
4

6 回答 6

23

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

于是我从xdebug 网站下载了最新的源码,做了以下操作:

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

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

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

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

于 2017-10-07T18:43:00.283 回答
9

为了安装它,您必须拥有 xcode 命令行工具。

所以你需要运行:

xcode-select --install

然后你需要安装autoconf:

brew install autoconf

然后你必须从这里下载代码。 之后,您必须在源代码的文件夹中运行:

  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
于 2017-11-05T19:47:46.250 回答
4

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

于 2017-10-05T22:24:59.320 回答
2

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

  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.so编译。modules

  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 步。如前文所述,这样您无需在 Mac OS X 上禁用/启用系统完整性保护。

于 2019-10-19T22:53:02.347 回答
0

大家好,尝试在 Mac 上安装 xDebug 时出错。

错误:未知类型名称“uint64_t”

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

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

于 2019-04-26T11:35:30.597 回答
0

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

于 2018-08-03T12:29:04.157 回答