tl; dr
A Apple decidiu remover o arquivo de cabeçalhos /usr/include
e o macOS_SDK_headers_for_macOS_10.14.pkg
pacote. Para instalar o Xdebug, você precisará compilar o Xdebug manualmente com a referência correta em ambos phpize
e make
.
Para mais detalhes, escrevi um artigo de blog sobre o problema e a solução
Para encurtar a história, a Apple decidiu lançar /usr/include
no MacOS Catalina, que sempre foi o local padrão para o arquivo de cabeçalho C nos sistemas UNIX. Tentar instalar através do PEAR / PECL retornará um erro, pois o compilador procurará o arquivo de cabeçalhos necessário /usr/include
. Portanto, a solução é compilar o Xdebug manualmente, especificando manualmente o local real dos arquivos de cabeçalho, que ainda são fornecidos pelo Xcode, apenas em um local diferente.
Primeiro, verifique se o Xcode está instalado, incluindo as ferramentas de linha de comando. O comando a seguir exibirá o local do SDK padrão:
$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
O cabeçalho que você deseja ( php.h
) será inserido /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main
.
Obtendo fonte
Vamos compilar o 2.7.2 , obtendo o código fonte do git. Como alternativa, você pode baixar a fonte do site Xdebug .
git clone https://github.com/xdebug/xdebug.git
cd xdebug
git checkout tags/2.7.2
phpize
Em seguida, precisamos fazer uma cópia phpize
para poder editar o caminho de inclusão:
cp /usr/bin/phpize .
nano ./phpize
Encontre esta linha:
includedir="`eval echo ${prefix}/include`/php"
... e substitua-o por esta linha:
includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"
Execute phpize
:
./phpize
Agora você deve ver algo assim:
Configuring for:
PHP Api Version: 20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731
Configurar e construir
Agora podemos configurar:
./configure --enable-xdebug
... e execute make usando nosso local personalizado do SDK definido como sinalizadores do 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'
Pode ver algum aviso, apenas ignorá-lo por enquanto. Por fim, precisamos executar:
make install
Novamente, esse comando falhará porque não pode mover a extensão para o lugar certo. O SIP impedirá isso. Mas não se preocupe, cuidaremos disso manualmente na próxima etapa. O make install ainda é necessário, pois assinará o arquivo * .so.
Suporte ativado em PHP
Em seguida, movemos o executável para um local seguro. Eu 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
Em seguida, editamos a configuração do PHP para ativar o Xdebug. Simplesmente edite php.ini
:
sudo nano /etc/php.ini
E adicionamos o seguinte na 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 o servidor interno para garantir:
sudo apachectl restart
E finalmente teste tudo correu bem:
php -i | grep "xdebug support"
Se o comando acima não retornar nada, o Xdebug não estará disponível na sua instalação. Volte as etapas para descobrir o que está faltando.
EDITAR
Uma correção mais completa seria editar o resultado de php-config --include-dir
, que retorna /usr/include/php
. Isso faria com que qualquer instalação encontre os arquivos de cabeçalho necessários sem precisar editar manualmente os arquivos ou os sinalizadores do compilador.