使用PHP 7在macOS 10.13上进行Xdebug

问题描述 投票:7回答:5

所以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

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

[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
php apache xdebug macos-high-sierra
5个回答
17
投票

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

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

  1. 安装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以使用新的二进制文件,一切都运行完美!


7
投票

要安装它,您必须拥有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

4
投票

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


0
投票

对于在这个聚会上迟到的人来说,问题的初步尝试似乎在macOS 10.13.6中运行得很好


0
投票

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

错误:未知类型名称'uint64_t'

本地/ bin / include中有文件导致此错误。通过删除它们,你摆脱了错误。但是,你可能不得不重新酿造啤酒。

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

© www.soinside.com 2019 - 2024. All rights reserved.