我试图在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的当前头文件吗?
我试图在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的当前头文件吗?
对于那些只想在MacOS上使用内置PHP版本的xdebug支持的人来说,本答案中的大部分说明都是不必要的。在进行任何操作之前,您应该检查/usr/lib/php/extensions/no-debug-non-zts-20180731/
目录下是否已经存在xdebug.so
文件,这个文件应该默认就在那里。如果是这样,您可以跳过本答案中的启用PHP支持部分。
对于您来说,使用Homebrew也是可行的解决方案(并且可以防止其他问题)。
对于其他想要在MacOS上构建二进制文件并遇到头文件错误的人来说,完整的答案适用于您。它也直接回答了OP的问题。需要注意的是,从源代码构建xdebug并尝试使用那个版本的xdebug.so
与内置PHP一起使用会导致"代码签名"错误。正如这里和这里所述,唯一的真正解决方案是编译并使用自己的PHP实例,而不是内置的PHP实例。在任何情况下,使用Homebrew会更容易。
苹果决定删除/usr/include
和macOS_SDK_headers_for_macOS_10.14.pkg
包中的头文件。为了安装Xdebug,您需要手动编译Xdebug,并在phpize
和make
中正确引用。
简而言之,苹果公司决定在MacOS Catalina中清除/usr/include
,这个位置一直是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
以便编辑包含路径:
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 文件。
接下来,我们将可执行文件移动到一个安全的地方。我使用 /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"
php-config --include-dir
的结果,该结果返回/usr/include/php
。这将使任何安装都能够找到必要的头文件,而无需手动编辑文件或编译器标志。brew reinstall php@7.3
brew link --overwrite php
pecl install xdebug-3.0.1
错误:
/private/tmp/pear/install/xdebug/xdebug.c:25:10: fatal error: 'php.h' file not found
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版本。
export PATH
来运行PHP本身。使用brew的“link”和“unlink”方法也可以工作(然后无需编辑bash_profile
)。如果Homebrew php版本在正常安装后在您的路径中,xdebug应该可以自己安装。有关brew link的详细信息,请参见其他答案或:https://getgrav.org/blog/macos-bigsur-apache-multiple-php-versions - Louis Charettebrew install php
,但仍然出现相同的错误。 - Carter Pape您可以在此网站上找到详细的说明和可用的补丁程序:https://profilingviewer.com/installing-xdebug-on-catalina.html
make install
之后执行本文“启用PHP支持”章节中的所有步骤。请记住,您可能会在不同位置拥有php.ini
文件。运行php --ini
以找出其位置并编辑正在使用的文件。 - Dejv./configure
命令时出现了问题。我一直收到no such file or directory: ./configure
的错误提示。还有其他人遇到过这个问题吗?或者只有我这么幸运? :D - cbloss793