在 MacOS Catalina 10.15 上安装 Xdebug
Installation of Xdebug on MacOS Catalina 10.15
我尝试在 OS X 10.15 和 运行 上安装 Xdebug 遇到以下问题:
/private/tmp/pear/install/xdebug/xdebug.c:25:10: fatal error: 'php.h' file not found
我尝试按照此处所述解决问题:Installing xdebug on MacOs Mojave - 'php.h' file not found
很遗憾,在此目录中找不到头文件:/Library/Developer/CommandLineTools/Packages
我可以从哪里获得 OS X 10.15 的当前头文件?
我建议你使用"brew"安装PHP,然后使用"pecl"安装版brew的PHP自带的工具安装Xdebug。
更新
对于只想在 MacOS 上支持 xdebug 的任何人,在使用 PHP 的 built-in 版本时,此答案中的大部分说明都不是必需的 .在做任何事情之前,您应该检查 xdebug.so
是否已经存在于 /usr/lib/php/extensions/no-debug-non-zts-20180731/
中,默认情况下应该存在。如果是这样,您可以跳到此答案的 PHP 部分中的 启用支持。
使用 Homebrew 也是您可以接受的解决方案 (and can also prevent other issues)。
对于任何其他想要在 MacOS 上实际构建二进制文件并收到 header 错误的人来说,完整的答案是给你的。它还直接回答 OP 问题。请注意,从源代码构建 xdebug 并实际尝试将 xdebug.so
版本与 build-in PHP 一起使用应该以“代码签名”错误告终。如所述 here and here, the only real solution would be to compile and use you own instance of PHP instead of the built-in one. In any situation, using Homebrew would be easier.
tl;博士
Apple 决定删除 /usr/include
中的 headers 文件和 macOS_SDK_headers_for_macOS_10.14.pkg
包。要安装 Xdebug,您必须在 phpize
和 make
.
中使用正确的引用手动编译 Xdebug
更多细节,我写了一篇关于the issue and the solution
的博客文章
原答案:
长话短说,Apple 决定在 MacOS Catalina 中对 /usr/include
进行核对,这一直是 UNIX 系统中 C header 文件的默认位置。尝试通过 PEAR / PECL 安装将 return 出错,因为编译器将在 /usr/include
中查找必要的 headers 文件。所以解决方案是手动编译Xdebug,手动指定header文件的实际位置,这些文件仍然由Xcode提供,只是在不同的位置。
首先,确保安装了 Xcode,包括命令行工具。以下命令将显示默认 SDK 的位置:
$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
您想要的 header (php.h
) 将在 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main
.
获取源代码
让我们编译2.7.2,从git获取源代码。或者,您可以从 Xdebug site.
下载源代码
git clone https://github.com/xdebug/xdebug.git
cd xdebug
git checkout tags/2.7.2
phpize
接下来我们需要制作一个副本phpize
以便我们可以编辑包含路径:
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 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"
如果上面的命令return没有任何内容,那么 Xdebug 在您的安装中不可用。返回步骤以找出缺少的内容。
注:
更完整的修复方法是编辑 php-config --include-dir
的结果,即 returns /usr/include/php
。这将使任何安装都能找到必要的 header 文件,而无需手动编辑文件或编译器标志。
如果您使用的是 brew,我会通过重新安装 php 并重新链接来解决此问题:
brew reinstall php@7.3
brew link --overwrite php
您可以在本网站上找到详细说明和即用型补丁:https://profilingviewer.com/installing-xdebug-on-catalina.html
我尝试在 MacOS Catalina 10.15 中安装 xdebug 时遇到错误:
pecl install xdebug-3.0.1
错误:
/private/tmp/pear/install/xdebug/xdebug.c:25:10: fatal error: 'php.h' file not found
这是因为 Apple 决定删除 /usr/include 中的头文件,就像您在其他答案中看到的那样。
然后我将配置添加到 .bash_profile,在控制台中执行这些行:
echo 'export PATH="/usr/local/opt/php@7.3/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.bash_profile
export LDFLAGS="-L/usr/local/opt/php@7.3/lib"
export CPPFLAGS="-I/usr/local/opt/php@7.3/include"
source ~/.bash_profile
之后你可以尝试用pecl再次安装xdebug:
pecl install xdebug-3.0.1
注意:以前我用“brew”安装了 PHP 7.3。您应该在上面的行中调整 php 和 xdebug 版本,添加您喜欢的版本。
我尝试在 OS X 10.15 和 运行 上安装 Xdebug 遇到以下问题:
/private/tmp/pear/install/xdebug/xdebug.c:25:10: fatal error: 'php.h' file not found
我尝试按照此处所述解决问题:Installing xdebug on MacOs Mojave - 'php.h' file not found
很遗憾,在此目录中找不到头文件:/Library/Developer/CommandLineTools/Packages
我可以从哪里获得 OS X 10.15 的当前头文件?
我建议你使用"brew"安装PHP,然后使用"pecl"安装版brew的PHP自带的工具安装Xdebug。
更新
对于只想在 MacOS 上支持 xdebug 的任何人,在使用 PHP 的 built-in 版本时,此答案中的大部分说明都不是必需的 .在做任何事情之前,您应该检查 xdebug.so
是否已经存在于 /usr/lib/php/extensions/no-debug-non-zts-20180731/
中,默认情况下应该存在。如果是这样,您可以跳到此答案的 PHP 部分中的 启用支持。
使用 Homebrew 也是您可以接受的解决方案 (and can also prevent other issues)。
对于任何其他想要在 MacOS 上实际构建二进制文件并收到 header 错误的人来说,完整的答案是给你的。它还直接回答 OP 问题。请注意,从源代码构建 xdebug 并实际尝试将 xdebug.so
版本与 build-in PHP 一起使用应该以“代码签名”错误告终。如所述 here and here, the only real solution would be to compile and use you own instance of PHP instead of the built-in one. In any situation, using Homebrew would be easier.
tl;博士
Apple 决定删除 /usr/include
中的 headers 文件和 macOS_SDK_headers_for_macOS_10.14.pkg
包。要安装 Xdebug,您必须在 phpize
和 make
.
更多细节,我写了一篇关于the issue and the solution
的博客文章原答案:
长话短说,Apple 决定在 MacOS Catalina 中对 /usr/include
进行核对,这一直是 UNIX 系统中 C header 文件的默认位置。尝试通过 PEAR / PECL 安装将 return 出错,因为编译器将在 /usr/include
中查找必要的 headers 文件。所以解决方案是手动编译Xdebug,手动指定header文件的实际位置,这些文件仍然由Xcode提供,只是在不同的位置。
首先,确保安装了 Xcode,包括命令行工具。以下命令将显示默认 SDK 的位置:
$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
您想要的 header (php.h
) 将在 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main
.
获取源代码
让我们编译2.7.2,从git获取源代码。或者,您可以从 Xdebug site.
下载源代码git clone https://github.com/xdebug/xdebug.git
cd xdebug
git checkout tags/2.7.2
phpize
接下来我们需要制作一个副本phpize
以便我们可以编辑包含路径:
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 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"
如果上面的命令return没有任何内容,那么 Xdebug 在您的安装中不可用。返回步骤以找出缺少的内容。
注:
更完整的修复方法是编辑 php-config --include-dir
的结果,即 returns /usr/include/php
。这将使任何安装都能找到必要的 header 文件,而无需手动编辑文件或编译器标志。
如果您使用的是 brew,我会通过重新安装 php 并重新链接来解决此问题:
brew reinstall php@7.3
brew link --overwrite php
您可以在本网站上找到详细说明和即用型补丁:https://profilingviewer.com/installing-xdebug-on-catalina.html
我尝试在 MacOS Catalina 10.15 中安装 xdebug 时遇到错误:
pecl install xdebug-3.0.1
错误:
/private/tmp/pear/install/xdebug/xdebug.c:25:10: fatal error: 'php.h' file not found
这是因为 Apple 决定删除 /usr/include 中的头文件,就像您在其他答案中看到的那样。
然后我将配置添加到 .bash_profile,在控制台中执行这些行:
echo 'export PATH="/usr/local/opt/php@7.3/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.bash_profile
export LDFLAGS="-L/usr/local/opt/php@7.3/lib"
export CPPFLAGS="-I/usr/local/opt/php@7.3/include"
source ~/.bash_profile
之后你可以尝试用pecl再次安装xdebug:
pecl install xdebug-3.0.1
注意:以前我用“brew”安装了 PHP 7.3。您应该在上面的行中调整 php 和 xdebug 版本,添加您喜欢的版本。