Installazione di Xdebug su MacOS Catalina 10.15


13

Ho provato a installare Xdebug su OS X 10.15 e ho riscontrato il seguente problema:

/private/tmp/pear/install/xdebug/xdebug.c:25:10: errore fatale: file 'php.h' non trovato

Ho provato a risolvere il problema come descritto qui: Installazione di xdebug su MacOs Mojave - file 'php.h' non trovato

Purtroppo i file di intestazione non possono essere trovati in questa directory: /Library/Developer/CommandLineTools/Packages

Qualche idea su dove posso ottenere i file di intestazione correnti per OS X 10.15?

Risposte:


28

tl; dr

Apple ha deciso di rimuovere il file header /usr/includee il macOS_SDK_headers_for_macOS_10.14.pkgpacchetto. Per installare Xdebug, dovrai compilare manualmente Xdebug con il riferimento corretto in entrambi phpizee 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/includein 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 phpizemodo 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.


1
La risposta più preziosa! Questo dovrebbe essere contrassegnato come corretto! Grazie Signore!
eltomato

HAI SALVATO IL MIO GIORNO
ludovico,

Questo è il modo migliore per risolvere il problema. Ha funzionato per me. Grazie, Louis
Raja Mohammed,

1
Per il supporto di PHP 7.4, devi installare XDebug 2.9 (non 2.7.2). Segui semplicemente queste istruzioni di installazione e dopo aver make installeseguito tutti i passaggi del capitolo "Supporto abilitato in PHP" di questo post. Tieni presente che potresti avere php.inifile in posizioni diverse. Esegui php --iniper capire dove e modificare quello che viene utilizzato invece.
Dejv

Sono stato bravo fino al ./configurecomando. Continuo a ricevere un no such file or directory: ./configure. Qualcun altro si imbatte in questo o sono solo il fortunato? : D
cbloss793,

0

Se stai usando brew, risolvo questo problema reinstallando php e ricollegando:

brew reinstall php@7.3
brew link --overwrite php

Non ha funzionato, amico.
Eric Chen,

Sfortunatamente la roba prodotta non funziona sempre come previsto, a seconda delle versioni.
jamespsterling


-2

Ti consiglierei di usare "brew" per installare PHP, e quindi utilizzare lo strumento "pecl" fornito con la versione installata di brew's PHP per installare Xdebug.


Questo è esattamente quello che ho fatto. Quando provo ad installare Xdebug con pecl ottengo l'errore sopra menzionato
Guenter

1
Ciò significa che sta raccogliendo lo strumento pecl sbagliato - quello installato con il tuo Mac. È necessario assicurarsi di utilizzare la birra fornita.
Derick,

@Guenter ha suggerito che il tuo problema è stato risolto? Sto riscontrando lo stesso problema e ho brew install phpriscontrato lo stesso errore.
Carter Pape,

Grazie @Derick, questo ha risolto il mio problema
Guenter il

1
pecl install xdebugha lavorato per me con 10.15.3
Juanmi Sosso il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.