Xdebug 3 no PHPStorm com PHP 7.4
Tags: php, xdebug, phpstorm, docker
Published: 2021-09-23 21:56:08

Olá Devs! Muitos bugs? Que bom que temos o Xdebug para nos ajudar!

Existem vários tutoriais mostrando como configurar o Xdebug  em diferentes versões do PHP no PHPStorm.  
Nesse artigo trago um Direto ao Ponto para configurar o Xdebug 3 no PHPStorm com PHP 7.4 e Docker - Linux.

Primeiro, vamos instalar o xdebug no container.
Em seguida, configurar o PHPStorm.

Vamos lá!

**1- Criar o arquivo docker-php-ext-xdebug.ini.**
Pode ser na raiz do projeto ou em alguma outra pasta de sua preferência.
Entrar no container e rodar `find / -name xdebug.so` para saber o path certo e colocar no zend_extension conforme abaixo:
`[xdebug]
zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
xdebug.mode=debug
xdebug.client_port=9003
xdebug.start_with_request=yes
xdebug.discover_client_host=0
xdebug.client_host=host.docker.internal`

**OBS:** Se tiver algum problema com o Xdebug não conseguir se conectar ao host.docker.internal, verificar qual é o ip da máquina local rodando o comando ifconfig (sudo apt install net-tools) e colocar esse ip no xdebug.client_host

**2- Adicionar no Dockerfile:**
`# Xdebug
RUN pecl install xdebug && docker-php-ext-enable xdebug`

`# Conferir os paths corretos da pasta php dentro do container
ADD docker-php-ext-xdebug.ini /usr/local/etc/php/conf.d/
RUN echo "include_path=/usr/local/etc/php/conf.d/xdebug.ini" >> /usr/local/etc/php/php.ini`

OBS: Entrar no container e rodar php --ini para saber os paths certos e colocar nessas linhas acima.

**3- Adicionar no docker-compose.yaml a variável de ambiente** dentro do serviço que vai rodar a aplicação:
`extra_hosts:`
`  - "host.docker.internal:host-gateway"`
`environment`
`  - PHP_IDE_CONFIG=serverName=XdebugServer`

##Agora vamos seguir com as configurações no PHPStorm

**4- Iniciar no PHPStorm a configuração** clicando no combobox que fica do lado esquerdo do ícone Play.
Em seguida seleciona a opção Edit Configurations...
![PHPStorm - Xdebug](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s2d455gile90yko6f733.png)

Na tela seguinte, em Configuration > Server, clicar no ícone `…` para adicionar um novo server.
![PHPStorm - Xdebug](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mrpzkx7fgmnh1bmels58.png)

**5- Preencher conforme imagem abaixo:**
![PHPStorm - Xdebug](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nxturnvrgooi1whqvxqc.png)
A Port deverá ser a que é usada no browser para rodar a aplicação
No caso da aplicação ficar dentro do container na pasta /var/www, a mesma deverá ser usada no path mappings.
Em File/Directory > Project files > path do projeto, na coluna Absolute path on the server adicionar o caminho da pasta www de dentro do container conforme imagem acima.

**6- Após essas configurações, voltar para a tela da Imagem 2** 
Clicar em Validate.
![PHPStorm](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bp3rot2689k7kw32kxvj.png)

O resultado esperado deve ser conforme imagem abaixo:
![PHPStorm Xdebug](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yzmtcupiktnpgma0xiqw.png)

Com isso, o Xdebug deverá funcinar.

[Clique aqui](https://github.com/thiagoluna/php-xdebug-mysql-nginx-redis-docker) para ver um exemplo de container configurado como descrito neste post.
Use e abuse!

Agradeço ao meu parceiro de Pair Programming **Juliano Fritz** que me ajudou a montar essa configuração.

Há braços e até o próximo Direto ao Ponto!

Thiago Luna - [Linkedin](https://www.linkedin.com/in/thiago-luna/)