tl; dr
Apple ha deciso di rimuovere il file header /usr/include
e il macOS_SDK_headers_for_macOS_10.14.pkg
pacchetto. Per installare Xdebug, dovrai compilare manualmente Xdebug con il riferimento corretto in entrambi phpize
e make
.
Per maggiori dettagli, ho scritto un articolo di blog sul problema e sulla soluzione
Per farla breve, Apple ha deciso di eseguire l'anteprima /usr/include
in MacOS Catalina, che è stata la posizione predefinita per il file di intestazione C per sempre nei sistemi UNIX. Tentare di installare tramite PEAR / PECL restituirà un errore poiché il compilatore cercherà il file di intestazioni necessario /usr/include
. Quindi la soluzione è compilare Xdebug manualmente, specificando manualmente l'ubicazione effettiva dei file di intestazione, che sono ancora forniti da Xcode, solo in una posizione diversa.
Innanzitutto, assicurati che Xcode sia installato, inclusi gli strumenti da riga di comando. Il comando seguente visualizzerà la posizione dell'SDK predefinito:
$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
L'intestazione che vorrai ( php.h
) sarà quindi in /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main
.
Ottenere la fonte
Compiliamo 2.7.2 , ottenendo il codice sorgente da git. In alternativa, puoi scaricare l'origine dal sito Xdebug .
git clone https://github.com/xdebug/xdebug.git
cd xdebug
git checkout tags/2.7.2
phpize
Quindi dobbiamo fare una copia in phpize
modo da poter modificare il percorso di inclusione:
cp /usr/bin/phpize .
nano ./phpize
Trova questa linea:
includedir="`eval echo ${prefix}/include`/php"
... e sostituiscilo con questa linea:
includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"
Esegui phpize
:
./phpize
Ora dovresti vedere qualcosa del genere:
Configuring for:
PHP Api Version: 20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731
Configura e costruisci
Ora possiamo configurare:
./configure --enable-xdebug
... ed esegui make usando la nostra posizione SDK personalizzata definita come flag del compilatore:
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'
Potrebbe vedere qualche avvertimento, ignoralo per ora. Infine, dovremo eseguire:
make install
Ancora una volta, questo comando fallirà perché non può spostare l'estensione nel posto giusto. SIP lo impedirà. Ma non preoccuparti, ci occuperemo di questo manualmente al prossimo passaggio. make install è ancora richiesto in quanto firmerà il file * .so.
Supporto abilitato in PHP
Successivamente, spostiamo l'eseguibile in un posto sicuro. Io uso /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
Quindi modifichiamo la configurazione di PHP per abilitare Xdebug. Modifica semplicemente php.ini
:
sudo nano /etc/php.ini
E aggiungiamo quanto segue in basso:
[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
Riavvia il server integrato per essere sicuro:
sudo apachectl restart
E infine test tutto è andato bene:
php -i | grep "xdebug support"
Se il comando sopra non restituisce nulla, Xdebug non è disponibile sulla tua installazione. Torna indietro per scoprire cosa manca.
MODIFICARE
Una correzione più completa sarebbe quella di modificare il risultato di php-config --include-dir
, che restituisce /usr/include/php
. Ciò farebbe in modo che qualsiasi installazione trovasse i file di intestazione necessari senza dover modificare manualmente i file o i flag del compilatore.