Instalación de Xdebug en MacOS Catalina 10.15

13

Intenté instalar Xdebug en OS X 10.15 y me encontré con el siguiente problema:

/private/tmp/pear/install/xdebug/xdebug.c:25:10: error fatal: no se encontró el archivo 'php.h'

Traté de solucionar el problema como se describe aquí: Instalación de xdebug en MacOs Mojave - no se encontró el archivo 'php.h'

Lamentablemente, los archivos de encabezado no se pueden encontrar en este directorio: /Library/Developer/CommandLineTools/Packages

¿Alguna idea de dónde puedo obtener los archivos de encabezado actuales para OS X 10.15?

Guenter
fuente

Respuestas:

28

tl; dr

Apple decidió eliminar el archivo de encabezados /usr/includey el macOS_SDK_headers_for_macOS_10.14.pkgpaquete. Para instalar Xdebug, tendrá que compilar manualmente Xdebug con la referencia correcta en ambos phpizey make.

Para más detalles, escribí un artículo de blog sobre el problema y la solución.


Para resumir, Apple decidió atacar /usr/includea MacOS Catalina, que ha sido la ubicación predeterminada para el archivo de encabezado C para siempre en sistemas UNIX. Intentar instalar a través de PEAR / PECL devolverá un error ya que el compilador buscará los archivos de encabezados necesarios /usr/include. Entonces, la solución es compilar Xdebug manualmente, especificando manualmente la ubicación real de los archivos de encabezado, que todavía proporciona Xcode, solo en una ubicación diferente.

Primero, asegúrese de que Xcode esté instalado, incluidas las herramientas de línea de comandos. El siguiente comando mostrará la ubicación del SDK predeterminado:

$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk

El encabezado que desee ( php.h) estará entonces en /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main.

Obteniendo fuente

Vamos a compilar 2.7.2 , para obtener el código fuente de Git. Alternativamente, puede descargar la fuente del sitio Xdebug .

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

phpize

A continuación, debemos hacer una copia phpizepara poder editar la ruta de inclusión:

cp /usr/bin/phpize .
nano ./phpize

Encuentra esta línea:

includedir="`eval echo ${prefix}/include`/php"

... y reemplazarlo con esta línea:

includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"

Ejecutar phpize:

./phpize

Ahora debería ver algo como esto:

Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731

Configurar y construir

Ahora podemos configurar:

./configure --enable-xdebug

... y ejecute make utilizando nuestra ubicación personalizada del SDK definida como banderas del compilador:

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'

Podría ver alguna advertencia, solo ignórela por ahora. Finalmente, necesitaremos ejecutar:

make install

Nuevamente, este comando fallará porque no puede mover la extensión al lugar correcto. SIP lo evitará. Pero no se preocupe, nos ocuparemos de eso manualmente en el siguiente paso. todavía se requiere hacer la instalación ya que firmará el archivo * .so.

Soporte habilitado en PHP

A continuación, movemos el ejecutable a un lugar seguro. Yo 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

Luego editamos la configuración de PHP para habilitar Xdebug. Simplemente edita php.ini:

sudo nano /etc/php.ini

Y agregamos lo siguiente en la parte inferior:

[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

Reinicie el servidor integrado para asegurarse:

sudo apachectl restart

Y finalmente prueba todo salió bien:

php -i | grep "xdebug support"

Si el comando anterior no devuelve nada, entonces Xdebug no está disponible en su instalación. Regrese los pasos para descubrir lo que falta.


EDITAR

Una solución más completa sería editar el resultado de php-config --include-dir, que regresa /usr/include/php. Eso haría que cualquier instalación encuentre los archivos de encabezado necesarios sin tener que editar manualmente los archivos o los indicadores del compilador.

Louis Charette
fuente
1
¡La respuesta más valiosa! ¡Esto debe marcarse como correcto! ¡Gracias Señor!
eltomato
AHORRASTE MI DÍA
ludovico
Esta es la mejor manera de resolver el problema. Funcionó para mi. Gracias, Louis
Raja Mohammed
1
Para la compatibilidad con PHP 7.4, debe instalar XDebug 2.9 (no 2.7.2). Simplemente siga estas instrucciones de instalación y luego siga make installtodos los pasos del capítulo "Soporte habilitado en PHP" de esta publicación. Tenga en cuenta que puede tener el php.iniarchivo en una ubicación diferente. Ejecute php --inipara averiguar dónde y edite el que se está utilizando en su lugar.
Dejv
Estuve bien hasta el ./configurecomando. Sigo recibiendo a no such file or directory: ./configure. ¿Alguien más se encuentra con esto o solo soy el afortunado? : D
cbloss793
0

Si está utilizando brew, lo resuelvo reinstalando php y volviendo a vincular:

brew reinstall php@7.3
brew link --overwrite php
jamespsterling
fuente
No funcionó, amigo.
Eric Chen
Lamentablemente, las cosas preparadas no siempre funcionan como se esperaba, dependiendo de sus versiones.
jamespsterling
-1

Puede encontrar instrucciones detalladas con parches listos para usar en este sitio: https://profilingviewer.com/installing-xdebug-on-catalina.html

user24525
fuente
1
Las respuestas que hacen referencia principalmente a un sitio externo deben incluir un resumen de la información para que se convierta en una fuente primaria, así como una referencia. Esto ayudará a la respuesta para resistir la prueba del tiempo.
Louis Charette
-2

Le recomendaría que use "brew" para instalar PHP, y luego use la herramienta "pecl" que viene con la versión instalada de PHP de brew para instalar Xdebug.

Derick
fuente
Eso es exactamente lo que hice. Cuando intento instalar Xdebug con pecl me sale el error mencionado anteriormente
Guenter
1
Eso significa que está eligiendo la herramienta pecl incorrecta: la que está instalada con su Mac. Debe asegurarse de usar el brebaje proporcionado.
Derick
@Guenter, ¿esa pista resolvió tu problema? Tengo el mismo problema y lo hice, brew install phppero sigo recibiendo el mismo error.
Carter Pape
Gracias @Derick, esto resolvió mi investigación
Guenter
1
pecl install xdebugtrabajó para mí bajo 10.15.3
Juanmi Sosso