我想在brew中的每个版本中安装多个版本的Xdebug

问题描述 投票:0回答:1

我有多个版本的 PHP,使用

brew
。当我想在 PHP 7.4 到 PHP 8.1 之间切换时,我使用此命令

brew unlink [email protected] && brew link [email protected]

当我下载 Xdebug for PHP 8.1 时,我使用

pecl install xdebug

到目前为止,它会安装Xdebug的最新版本。所以如果我写

pecl list

我明白了

Package Version State
imagick 3.7.0   stable
xdebug  3.2.2   stable

当我打开

/usr/local/etc/php/8.1/php.ini
我得到

zend_extension="xdebug.so"

到现在为止都还好。

现在问题是当我想为我的 PHP 7.4 安装较低版本时(因为较新版本的 Xdebug 与 PHP 7.4 不兼容)。所以根据 this page 我最多应该下载 PHP 7 的 xdebug-3.1。

所以我将使用

切换到 PHP 7
brew unlink [email protected] && brew link [email protected]

然后我使用此命令下载与 PHP 7.4 兼容的 Xdebug 版本

pecl install xdebug-3.1.6

它会很好地下载,但是每当我使用 PHP 时我都会遇到这个问题,例如

php -v

Failed loading /usr/local/opt/[email protected]/pecl/20210902/xdebug.so:  dlopen(/usr/local/opt/[email protected]/pecl/20210902/xdebug.so, 0x0009): symbol not found in flat namespace (_instanceof_function_slow)

我猜是因为它不知道 Xdebug 的路径。

如果我打开

/usr/local/etc/php/7.4/php.ini
我得到

zend_extension="xdebug.so"

我尝试将PHP 7中的php.ini中的路径更改为

/usr/local/opt/[email protected]/pecl/20210902/xdebug.so
,因为该路径中有Xdebug文件,但问题仍然存在。

如何解决这个问题?

php homebrew xdebug laravel-valet
1个回答
0
投票

您正在加载为错误的 PHP 版本编译的

xdebug.so
。对于 PHP 7.4,您应该查看是否有
.../pecl/20190902/xdebug.so
文件。然后检查您的活动 php.ini 以查看扩展从哪里加载,请参阅
extension_dir
php.ini 指令。

详情:

“加载失败”错误告诉我两件事。 首先,加载的.so文件依赖于导出的函数

_instanceof_function_slow

。这是

PHP-8 分支
中存在的内容,但 PHP 7.4 分支中不存在。 第二个是路径

/usr/local/opt/[email protected]/pecl/20210902/xdebug.so

中的API版本。

20210902
API 版本对应于 PHP 8.1,而 PHP 7.4 使用 20190902。我无法在官方网站上找到列表(除了查看源代码),但这里有一个列出版本的
link
供参考。

PHP版本7.48.1
API版本
20190902
20210902
我的猜测是,brew link/unlink 保留相同的 pecl 目录(
/usr/local/opt/[email protected]/pecl

==

/usr/local/opt/[email protected]/pecl
)和/或 php.ini 需要调整。
要调试,我建议如下:

    pecl list
  • 当 PHP 7.4 处于活动状态时
    列出并检查
  • /usr/local/opt/[email protected]/pecl
  • /usr/local/opt/[email protected]/pecl
    的内容是否有更多API版本文件夹(寻找
    20190902
    20210902
    通过 
  • php -i | grep extension_dir
  •  检查活动扩展文件夹
    
    检查是否有任何对 pecl 文件夹的引用
  • php -i | grep -i pecl
  • 看看是否有extension_dir和pecl的神奇符号链接
  • 尝试加载
  • zend_extension="/usr/local/opt/[email protected]/pecl/20190902/xdebug.so"
  • 
        
© www.soinside.com 2019 - 2024. All rights reserved.