tl; dr
Apple quyết định loại bỏ tập tin tiêu đề trong /usr/include
và macOS_SDK_headers_for_macOS_10.14.pkg
gói. Để cài đặt Xdebug, bạn sẽ phải biên dịch Xdebug theo cách thủ công với tham chiếu chính xác trong cả hai phpize
và make
.
Để biết thêm chi tiết, tôi đã viết một bài viết trên blog về vấn đề và giải pháp
Tóm lại, Apple đã quyết định nuke /usr/include
trong MacOS Catalina, đây là vị trí mặc định cho tệp tiêu đề C chưa từng có trong các hệ thống UNIX. Cố gắng cài đặt thông qua PEAR / PECL sẽ trả về lỗi vì trình biên dịch sẽ tìm tệp tiêu đề cần thiết trong /usr/include
. Vì vậy, giải pháp là biên dịch Xdebug theo cách thủ công, chỉ định thủ công vị trí thực tế của các tệp tiêu đề vẫn được Xcode cung cấp, chỉ ở một vị trí khác.
Trước tiên, hãy đảm bảo Xcode được cài đặt, bao gồm các công cụ dòng lệnh. Lệnh sau sẽ hiển thị vị trí của SDK mặc định:
$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
Tiêu đề bạn sẽ muốn ( php.h
) sẽ xuất hiện /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main
.
Lấy nguồn
Hãy biên dịch 2.7.2 , lấy mã nguồn từ git. Ngoài ra, bạn có thể tải xuống nguồn từ trang Xdebug .
git clone https://github.com/xdebug/xdebug.git
cd xdebug
git checkout tags/2.7.2
Phốt
Tiếp theo chúng ta cần tạo một bản sao phpize
để có thể chỉnh sửa đường dẫn bao gồm:
cp /usr/bin/phpize .
nano ./phpize
Tìm dòng này:
includedir="`eval echo ${prefix}/include`/php"
... và thay thế nó bằng dòng này:
includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"
Chạy phpize
:
./phpize
Bây giờ bạn sẽ thấy một cái gì đó như thế này:
Configuring for:
PHP Api Version: 20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731
Cấu hình và xây dựng
Bây giờ chúng ta có thể cấu hình:
./configure --enable-xdebug
... và chạy make bằng cách sử dụng vị trí SDK tùy chỉnh của chúng tôi được xác định là cờ trình biên dịch:
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'
Có thể thấy một số cảnh báo, chỉ cần bỏ qua nó bây giờ. Cuối cùng, chúng ta sẽ cần chạy:
make install
Một lần nữa, lệnh này sẽ thất bại vì nó không thể di chuyển phần mở rộng đến đúng nơi. SIP sẽ ngăn chặn nó. Nhưng không phải lo lắng, chúng tôi sẽ xử lý việc đó bằng tay ở bước tiếp theo. thực hiện cài đặt vẫn được yêu cầu vì nó sẽ ký vào tệp * .so.
Hỗ trợ hỗ trợ trong PHP
Tiếp theo, chúng tôi di chuyển thực thi ở một nơi an toàn. Tôi sử dụng /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
Sau đó, chúng tôi chỉnh sửa cấu hình PHP để kích hoạt Xdebug. Chỉ cần chỉnh sửa php.ini
:
sudo nano /etc/php.ini
Và chúng tôi thêm vào như sau ở phía dưới:
[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
Khởi động lại máy chủ được xây dựng để đảm bảo:
sudo apachectl restart
Và cuối cùng kiểm tra mọi thứ đều ổn:
php -i | grep "xdebug support"
Nếu lệnh trên không trả về gì, thì Xdebug không có sẵn trong cài đặt của bạn. Quay trở lại các bước để tìm hiểu những gì còn thiếu.
BIÊN TẬP
Một sửa chữa đầy đủ hơn sẽ là chỉnh sửa kết quả php-config --include-dir
, trả về /usr/include/php
. Điều đó sẽ làm cho bất kỳ cài đặt nào tìm thấy các tệp tiêu đề cần thiết mà không phải chỉnh sửa thủ công các tệp hoặc cờ trình biên dịch.