在MacOS Catalina 10.15上安装Xdebug

Gue*_*ter 3 macos xcode xdebug macos-catalina

我试图在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的当前头文件吗?

Lou*_*tte 9

tl; dr

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

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


长话短说,Apple决定/usr/include在MacOS 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
Run Code Online (Sandbox Code Playgroud)

然后,您想要的标题(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
Run Code Online (Sandbox Code Playgroud)

phpize

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

cp /usr/bin/phpize .
nano ./phpize
Run Code Online (Sandbox Code Playgroud)

找到这行:

includedir="`eval echo ${prefix}/include`/php"
Run Code Online (Sandbox Code Playgroud)

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

includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"
Run Code Online (Sandbox Code Playgroud)

运行phpize

./phpize
Run Code Online (Sandbox Code Playgroud)

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

Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731
Run Code Online (Sandbox Code Playgroud)

配置和构建

我们现在可以配置:

./configure --enable-xdebug
Run Code Online (Sandbox Code Playgroud)

...并使用定义为编译器标志的自定义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'
Run Code Online (Sandbox Code Playgroud)

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

make install
Run Code Online (Sandbox Code Playgroud)

同样,此命令将失败,因为它无法将扩展名移动到正确的位置。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
Run Code Online (Sandbox Code Playgroud)

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

sudo nano /etc/php.ini
Run Code Online (Sandbox Code Playgroud)

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

[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
Run Code Online (Sandbox Code Playgroud)

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

sudo apachectl restart
Run Code Online (Sandbox Code Playgroud)

最后测试一切顺利:

php -i | grep "xdebug support"
Run Code Online (Sandbox Code Playgroud)

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


编辑

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

  • 为了支持 PHP 7.4,您需要安装 XDebug 2.9(而不是 2.7.2)。只需按照[这些安装说明](https://github.com/xdebug/xdebug/tree/xdebug_2_9) 进行操作,并在 `make install` 之后执行本文“在 PHP 中启用支持”一章的所有步骤。请记住,您可能在不同位置有“php.ini”文件。运行“php --ini”来找出位置并编辑正在使用的那个。 (2认同)

归档时间:

查看次数:

935 次

最近记录:

6 年,3 月 前