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 下载了最新的源代码并执行了以下操作:
- 用 brew 安装了 autoconf;
- 运行
phpize
为新的 Zend 引擎配置构建;
- 运行
./configure
- 运行
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.
之后你必须在源代码的文件夹中 运行:
phpize
./configure
make
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。
如果您在 Mac OS X mojave 上安装了多个 PHP 版本的 brew,即 7.1、7.2 和 7.3,您可以执行以下操作:
用 brew 安装 autoconf brew install autoconf
.
更改为您想要 Xdebug 的 PHP 版本,运行 brew unlink php@7.1 && brew link --force --overwrite php
。这将从 PHP 7.1 切换到 PHP 7.3.
从 xdebug 网站下载最新的 Xdebug 源。
解压 Xdebug tar 并导航到解压目录,您会在其中看到所有文件。
运行 phpize
为新的 Zend 引擎配置构建。
运行 ./configure
.
运行 make
.
Xdebug 扩展 xdebug.so
在 modules
目录中编译。
在/usr/local/lib/php/7.3.1/extensions/
下新建目录路径,复制xdebug.so
到该位置。在这里,7.3.1
是我之前切换的当前版本,更改它以匹配您的 PHP 版本。
在编辑器中打开 php.ini
并输入
zend_extension="/usr/local/lib/php/7.3.1/extensions/xdebug.so"
然后保存更改。
运行 php -v
它会显示 Xdebug 已正确配置。
如果你想在另一个 PHP 版本上配置 Xdebug,那么只需从第 2 步一直重复到第 11 步。如前所述 post,这样你就不需要 disable/enable Mac OS X.
上的系统完整性保护
所以 macOS High Sierra 10.13 现在附带 PHP 7.1。在配置 Apache 时,我还从 /etc/php.ini.default
文件创建了一个新的 /etc/php.ini
,确保在重新启动 Apache 后检查 PHP 正在加载它,但是附带的 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
您在 "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 下载了最新的源代码并执行了以下操作:
- 用 brew 安装了 autoconf;
- 运行
phpize
为新的 Zend 引擎配置构建; - 运行
./configure
- 运行
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. 之后你必须在源代码的文件夹中 运行:
phpize
./configure
make
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。
如果您在 Mac OS X mojave 上安装了多个 PHP 版本的 brew,即 7.1、7.2 和 7.3,您可以执行以下操作:
用 brew 安装 autoconf
brew install autoconf
.更改为您想要 Xdebug 的 PHP 版本,运行
brew unlink php@7.1 && brew link --force --overwrite php
。这将从 PHP 7.1 切换到 PHP 7.3.从 xdebug 网站下载最新的 Xdebug 源。
解压 Xdebug tar 并导航到解压目录,您会在其中看到所有文件。
运行
phpize
为新的 Zend 引擎配置构建。运行
./configure
.运行
make
.Xdebug 扩展
xdebug.so
在modules
目录中编译。在
/usr/local/lib/php/7.3.1/extensions/
下新建目录路径,复制xdebug.so
到该位置。在这里,7.3.1
是我之前切换的当前版本,更改它以匹配您的 PHP 版本。在编辑器中打开
php.ini
并输入zend_extension="/usr/local/lib/php/7.3.1/extensions/xdebug.so"
然后保存更改。运行
php -v
它会显示 Xdebug 已正确配置。
如果你想在另一个 PHP 版本上配置 Xdebug,那么只需从第 2 步一直重复到第 11 步。如前所述 post,这样你就不需要 disable/enable Mac OS X.
上的系统完整性保护