在MacOS Catalina 10.15上安装Xdebug


13

我试图在OS X 10.15上安装Xdebug并遇到以下问题:

/private/tmp/pear/install/xdebug/xdebug.c:25:10:致命错误:找不到“ php.h”文件

我试图解决这里描述的问题:在MacOs Mojave上安装xdebug-找不到'php.h'文件

不幸的是,在此目录中找不到头文件: /Library/Developer/CommandLineTools/Packages

有什么想法可以获取OS X 10.15的当前头文件吗?

Answers:


28

tl; dr

苹果公司决定删除页眉文件/usr/includemacOS_SDK_headers_for_macOS_10.14.pkg包。要安装Xdebug,您必须手动在phpize和中使用正确的引用编译Xdebug make

有关更多详细信息,我写了一篇有关该问题解决方案的博客文章


长话短说,Apple决定对/usr/includeMacOS Catalina 进行核对,MacOS Catalina一直是UNIX系统中C头文件的默认位置。尝试通过PEAR / PECL安装将返回错误,因为编译器将在中寻找必要的头文件/usr/include。因此,解决方案是手动编译Xdebug,手动指定头文件的实际位置,这些头文件仍然由Xcode提供,位于其他位置。

首先,确保已安装Xcode,包括命令行工具。以下命令将显示默认SDK的位置:

$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk

然后,您想要的标题(php.h)将位于/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main

取得来源

让我们编译2.7.2,从git获取源代码。或者,您可以从Xdebug网站下载源。

git clone https://github.com/xdebug/xdebug.git
cd xdebug
git checkout tags/2.7.2

phpize

接下来,我们需要制作一个副本,phpize以便我们可以编辑include路径:

cp /usr/bin/phpize .
nano ./phpize

找到这行:

includedir="`eval echo ${prefix}/include`/php"

...并将其替换为此行:

includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"

运行phpize

./phpize

您现在应该看到类似这样的内容:

Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731

配置和构建

我们现在可以配置:

./configure --enable-xdebug

...并使用定义为编译器标志的自定义SDK位置运行make:

make CPPFLAGS='-I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/TSRM -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/Zend -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/ext -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/ext/date/lib'

可能会看到一些警告,暂时将其忽略。最后,我们需要运行:

make install

同样,此命令将失败,因为它无法将扩展名移动到正确的位置。SIP将阻止它。但是不用担心,我们将在下一步中手动进行处理。仍然需要进行make install,因为它将签名* .so文件。

在PHP中启用支持

接下来,我们将可执行文件移到安全的地方。我用/usr/local/php/extensions

sudo mkdir -p /usr/local/php/extensions
sudo cp /usr/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so /usr/local/php/extensions

然后,我们编辑PHP配置以启用Xdebug。只需编辑php.ini

sudo nano /etc/php.ini

我们在底部添加以下内容:

[xdebug]
zend_extension=/usr/local/php/extensions/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

重新启动内置服务器,以确保:

sudo apachectl restart

最后测试一切顺利:

php -i | grep "xdebug support"

如果以上命令未返回任何内容,则Xdebug在您的安装中不可用。返回步骤以找出缺少的内容。


编辑

更完整的解决方法是编辑结果php-config --include-dir,返回/usr/include/php。这样一来,任何安装都无需手动编辑文件或编译器标志即可找到必要的头文件。


1
最有价值的答案!这应该标记为正确!谢谢你,先生!
eltomato

您保存了我的一天
ludovico19年

这是解决问题的最佳方法。它为我工作。谢谢路易斯
拉贾·穆罕默德

1
为了获得PHP 7.4的支持,您需要安装XDebug 2.9(而不是2.7.2)。只需按照这些安装说明进行操作,然后make install执行本文的“在PHP中启用支持”一章的所有步骤即可。请记住,php.ini文件可能位于其他位置。运行php --ini以找出位置,然后编辑正在使用的位置。
Dejv

直到./configure命令我一直很好。我不断收到no such file or directory: ./configure。其他人遇到这个问题还是我只是幸运者?:D
cbloss793

0

如果您使用brew,我可以通过重新安装php并重新链接来解决此问题:

brew reinstall php@7.3
brew link --overwrite php

没用,老兄。
Eric Chen

不幸的是,根据您的版本,酿造的东西无法正常工作。
jamespsterling


-2

我建议您使用“ brew”安装PHP,然后使用Brew的PHP安装版本随附的“ pecl”工具安装Xdebug。


那正是我所做的。尝试使用pecl安装Xdebug时,出现上述错误
Guenter

1
这意味着它选择了错误的pecl工具-Mac上安装的工具。您需要确保使用提供的冲泡机。
德里克

@Guenter提示是否解决了您的问题?我遇到了同样的麻烦,brew install php但是确实遇到了同样的错误。
卡特·帕佩

谢谢@Derick,这解决了我的问题
Guenter

1
pecl install xdebug在10.15.3下为我工作
Juanmi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.