使用PHP 7在macOS 10.13上进行Xdebug

时间:2017-10-05 20:02:05

标签: php apache xdebug macos-high-sierra

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

6 个答案:

答案 0 :(得分:15)

好的,所以我终于让它自己运行它完美无缺!我假设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
  5. 现在新的二进制文件位于modules/xdebug.so

    之下

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

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

答案 1 :(得分: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(如果目录不存在则去创建它)
  5. 最后在php.ini中添加

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

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

    sudo apachectl restart
    

答案 2 :(得分:4)

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

答案 3 :(得分:0)

对于任何迟到该聚会的人,问题的最初尝试似乎在macOS 10.13.6中都可以正常工作

答案 4 :(得分:0)

向在Mac上安装xDebug时出错的所有人致敬。

  

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

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

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

答案 5 :(得分:0)

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

  1. 使用brew brew install autoconf安装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。如先前的文章所述,您无需在Mac OS X上禁用/启用系统完整性保护。