tl; dr
Apple memutuskan untuk menghapus file header /usr/include
dan macOS_SDK_headers_for_macOS_10.14.pkg
paket. Untuk menginstal Xdebug, Anda harus secara manual mengkompilasi Xdebug dengan referensi yang benar di keduanya phpize
dan make
.
Untuk lebih jelasnya, saya menulis artikel blog tentang masalah dan solusinya
Singkat cerita, Apple memutuskan untuk nuke /usr/include
di MacOS Catalina, yang telah menjadi lokasi default untuk file header C selama-lamanya dalam sistem UNIX. Mencoba menginstal melalui PEAR / PECL akan menghasilkan kesalahan karena kompiler akan mencari file header yang diperlukan /usr/include
. Jadi solusinya adalah mengkompilasi Xdebug secara manual, secara manual menentukan lokasi sebenarnya dari file header, yang masih disediakan oleh Xcode, hanya di lokasi yang berbeda.
Pertama, pastikan Xcode diinstal, termasuk alat-alat baris perintah. Perintah berikut akan menampilkan lokasi SDK default:
$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
Header yang Anda inginkan ( php.h
) akan berada di /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main
.
Mendapatkan sumber
Mari kita mengkompilasi 2.7.2 , mendapatkan kode sumber dari git. Atau, Anda dapat mengunduh sumber dari situs Xdebug .
git clone https://github.com/xdebug/xdebug.git
cd xdebug
git checkout tags/2.7.2
phpize
Selanjutnya kita perlu membuat salinan phpize
sehingga kita dapat mengedit jalur sertakan:
cp /usr/bin/phpize .
nano ./phpize
Temukan baris ini:
includedir="`eval echo ${prefix}/include`/php"
... dan ganti dengan baris ini:
includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"
Jalankan phpize
:
./phpize
Anda sekarang akan melihat sesuatu seperti ini:
Configuring for:
PHP Api Version: 20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731
Konfigurasikan & bangun
Kami sekarang dapat mengkonfigurasi:
./configure --enable-xdebug
... dan jalankan make menggunakan lokasi SDK khusus kami yang didefinisikan sebagai flag kompilator:
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'
Mungkin melihat beberapa peringatan, abaikan saja untuk sekarang. Akhirnya, kita harus menjalankan:
make install
Sekali lagi, perintah ini akan gagal karena tidak dapat memindahkan ekstensi ke tempat yang tepat. SIP akan mencegahnya. Tapi jangan khawatir, kami akan membereskannya secara manual di langkah berikutnya. make install masih diperlukan karena akan menandatangani file * .so
Dukungan yang diaktifkan di PHP
Selanjutnya, kita pindahkan executable ke tempat yang aman. Saya menggunakan /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
Kemudian kami mengedit konfigurasi PHP untuk mengaktifkan Xdebug. Cukup edit php.ini
:
sudo nano /etc/php.ini
Dan kami menambahkan yang berikut di bagian bawah:
[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
Mulai ulang server bawaan untuk memastikan:
sudo apachectl restart
Dan akhirnya menguji semuanya berjalan dengan baik:
php -i | grep "xdebug support"
Jika perintah di atas tidak mengembalikan apa pun, maka Xdebug tidak tersedia pada instalasi Anda. Kembali ke langkah-langkah untuk mencari tahu apa yang hilang.
EDIT
Perbaikan yang lebih lengkap adalah mengedit hasil php-config --include-dir
, yang mengembalikan /usr/include/php
. Itu akan membuat setiap instalasi menemukan file header yang diperlukan tanpa harus mengedit file atau flag compiler secara manual.