It has been said before, to make xDebug faster, just disable it.
But one still needs xDebug for how helpful it is!
Well, there is a good solution which is to only enable xDebug when we intend to debug the request.
The idea is to create two php containers (php
and php_xdebug
) and enable xDebug on only one of these two containers.
Then we can instruct apache
to use the php_xdebug
container only when a certain cookie is set.
apache
config
<If "%{HTTP_COOKIE} =~ /XDEBUG_SESSION=PHPSTORM/">
SetHandler "proxy:fcgi://php_xdebug:9000"
</If>
<Else>
SetHandler "proxy:fcgi://php:9000"
</Else>
So in this case, we only use php_xdebug when the XDEBUG_SESSION
cookie is set to PHPSTORM
.
The PHPSTORM
value itself can be changed in the env file and in the xDebug helper browser extension.
The rest is very simple, we just need to configure xDebug to always start remote debugging when it's invoked.
The profiler
and log
output will be sent to a /tmp
folder inside the server root.
zend_extension=xdebug.so
[xdebug]
xdebug.remote_autostart = 1
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_connect_back=1
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir = /var/www/html/tmp
xdebug.idekey=${XDEBUG_COOKIE_VALUE}
xdebug.remote_log=/var/www/html/tmp/xdebug.log
You can find the docker-compose file in this github repo
https://github.com/unlocomqx/conditional-xdebug-fpm-docker
After cloning the repo, you can rename the file sample.env
to .env
and change DOCUMENT_ROOT
, MYSQL_DATA_DIR
and XDEBUG_COOKIE_VALUE
if necessary.
This solution was totally inspired by this blog post https://jtreminio.com/blog/developing-at-full-speed-with-xdebug/
Top comments (0)