[ update ]
Set the IP-address to the following DNS-name: docker.for.mac.localhost (yes, literally)!
Working with the IP-address doesn’t work anymore
[ /update ]
Want to get XDebug working for your PHPUnit tests which run in Docker? Or for behat? Or any other CLI application? Follow me!
Roughly this is what you’ll need to do: Continue reading
Want to run a CLI command on Docker while debugging it with XDebug in an IDE like PHPStorm?
Then you need to have your environment in order.
First, create the path mappings in PHPStorm by creating a server in Settings / Preferences | Languages & Frameworks | PHP | Servers.
Continue readingThis script disables xdebug for one run. No more error-messages like:
$ composer update
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
and:
$ php-cs-fixer fix --dry-run .
You are running PHP CS Fixer with xdebug enabled. This has a major impact on runtime performance.
If you need help while solving warnings, ask at https://gitter.im/PHP-CS-Fixer, we will help you!
We’ll create a script which will:
the script we’ll name php-no-xdebug
(or whatever you like)
With Xdebug (note the last line)
$ php --version
PHP 7.1.10 (cli) (built: Oct 6 2017 01:08:19) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
Without Xdebug (note the missing last line)
$ php-no-xdebug --version
PHP 7.1.10 (cli) (built: Oct 6 2017 01:08:19) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
php-no-xdebug
Create the script /usr/local/bin/php-no-xdebug
with the following contents.
# file /usr/local/bin/php-no-xdebug
#!/bin/bash
php=$(which php)
# get the xdebug config
xdebugConfig=$(php -i | grep xdebug | while read line; do echo $line; exit; done)
# no xdebug? Nothing to do!
if [ "$xdebugConfig" == "" ]; then
$php "$@"
exit
fi
# get the configfile (which should be the first value)
# so strip off everything after the first space of the xdebug-config
xdebugConfigFile=$(php -i | grep xdebug | while read line; do echo $line; exit; done)
# test whether we got it right
if [ ! -f "$xdebugConfigFile" ]; then
echo "No XDebug configfile found!"
exit 1
fi
# disable xdebug by renaming the relevant .ini file
mv ${xdebugConfigFile}{,.temporarily-disabled}
# dissect the argument to extract the first one (which should be a script or an application in $PATH) from the rest
index=0
for arg in $(echo $@ | tr ' ' "\n")
do
if [ "$index" == "0" ]; then
firstArg=$arg
else
restArg="$restArg $arg"
fi
((index++))
done
# check whether the command to be executed is a local PHP file or something in the $PATH like composer or php-cs-fixer
fullPath="$(which $firstArg)"
if [ "$fullPath" == "" ]; then
# check whether it's a local file
if [ ! -f $firstArg ]; then
echo "Could not find $firstArg. No such file or directory"
exit 1
else
# just run the commands
$php $@
fi
else
# run the command with the fullpath followed by the rest of the arguments provided
$php $fullPath $restArg
fi
# execute the command
$php "$@"
# re-enable xdebug
mv ${xdebugConfigFile}{.temporarily-disabled,}
# test whether the conf file is restored correctly
if [ ! -f "$xdebugConfigFile" ]; then
echo "Something went wrong with restoring the configfile for xdebug!"
exit 1
fi
and make it executable
$ chmod +x /usr/local/bin/php-no-xdebug
That’s it! Run it like this:
$ php-no-xdebug composer update