Disable xdebug for one run
This 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!
This is what you’ll get
We’ll create a script which will:
- disable xdebug
- run your command
- enable xdebug
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
The script 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