簡體   English   中英

在 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:致命錯誤:找不到“php.h”文件

我試圖解決這里描述的問題: 在 MacOs Mojave 上安裝 xdebug - 'php.h' 文件未找到

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

有什么想法可以獲取 OS X 10.15 的當前 header 文件嗎?

更新

對於只希望在 MacOS 上支持 xdebug 的任何人,使用 PHP 的內置版本時,不需要此答案中的大多數說明。 在做任何事情之前,您應該檢查xdebug.so是否已經存在於/usr/lib/php/extensions/no-debug-non-zts-20180731/中,默認情況下應該存在。 如果是這樣,您可以跳到此答案的 PHP 部分中的已啟用支持

使用 Homebrew 也是您可以接受的解決方案( 並且還可以防止其他問題)。

對於希望在 MacOS 上實際構建二進制文件並獲得 header 錯誤的任何其他人,完整的答案適合您。 它還直接回答 OP 問題。 請注意,從源代碼構建 xdebug 並實際嘗試使用帶有內置 PHP 的xdebug.so版本應該會導致“代碼簽名”錯誤。 這里這里所述,唯一真正的解決方案是編譯和使用您自己的 PHP 實例而不是內置實例。 在任何情況下,使用 Homebrew 都會更容易


tl;博士

Apple 決定刪除/usr/includemacOS_SDK_headers_for_macOS_10.14.pkg package 中的頭文件。 要安裝 Xdebug,您必須在phpizemake中使用正確的引用手動編譯 Xdebug。

有關更多詳細信息,我寫了一篇關於該問題解決方案的博客文章


原答案:

長話短說,Apple 決定在 MacOS Catalina 中刪除/usr/include ,它一直是 C header 文件在 Z15395D0642F86C5992ABBCA5E56E2B2Z9 系統中的默認位置嘗試通過 PEAR / PECL 安裝將返回錯誤,因為編譯器將在/usr/include中查找必要的頭文件。 所以解決方法是手動編譯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 站點下載源代碼。

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

php化

接下來我們需要復制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 文件。

在 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 在您的安裝中不可用。 Go 返回步驟以找出缺少的內容。

注意:更完整的修復方法是編輯php-config --include-dir的結果,它返回/usr/include/php 這將使任何安裝都能找到必要的 header 文件,而無需手動編輯文件或編譯器標志。

如果您使用的是 brew,我通過重新安裝 php 並重新鏈接來解決此問題:

brew reinstall php@7.3
brew link --overwrite php

當我嘗試在 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 版本,在上面的行中,添加您喜歡的版本。

我建議你使用“brew”安裝 PHP,然后使用安裝版 brew 的 PHP 附帶的“pecl”工具安裝 Xdebug。

您可以在此站點上找到帶有即用型補丁的詳細說明: https://profilingviewer.com/installing-xdebug-on-catalina.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM