运行 composer 时禁用 xdebug
Disabling xdebug when running composer
当 运行 composer diagnose
时,出现以下错误:
The xdebug extension is loaded, this can slow down Composer a little.
Disabling it when using Composer is recommended.
如何才能仅在我是 运行 Composer 时禁用 xdebug?
我认为没有配置选项 PHP 所以它可以根据目标脚本加载不同的配置。至少,不是没有复制 .ini 文件...
但是,当 运行 作曲家使用 php 时,您可以添加这些选项:
php -n -d extension=needed_ext.so composer.phar
-n
会告诉 PHP 忽略任何 php.ini。这将阻止 xdebug 为这个命令加载。
-d
选项允许您添加任何您想要的选项(例如,激活 needed_ext.so)。您可以使用多个 -d
选项。当然,这是可选的,你可能不需要它。
然后你可以创建一个别名,让它再次变甜。
一个典型的解决方案(因为composer需要json):
php -n -d extension=json.so composer.phar
greg0ire > 我的解决方案,基于此:
#!/bin/bash
options=$(ls -1 /usr/lib64/php/modules| \
grep --invert-match xdebug| \
# remove problematic extensions
egrep --invert-match 'mysql|wddx|pgsql'| \
sed --expression 's/\(.*\)/ --define extension=/'| \
# join everything together back in one big line
tr --delete '\n'
)
# build the final command line
php --no-php-ini $options ~/bin/composer $*
alias composer=/path/to/bash/script.sh
它看起来很难看(我尝试使用 xargs 做到这一点但失败了),但是有效……不过我不得不禁用一些扩展,否则我会收到以下警告:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysqli.so' - /usr/lib64/php/modules/mysqli.so: undefined symbol: mysqlnd_connect in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_mysql.so' - /usr/lib64/php/modules/pdo_mysql.so: undefined symbol: pdo_parse_params in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_pgsql.so' - /usr/lib64/php/modules/pdo_pgsql.so: undefined symbol: pdo_parse_params in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/wddx.so' - /usr/lib64/php/modules/wddx.so: undefined symbol: php_XML_SetUserData in Unknown on line 0
我想出了一个适用于 OSX 的答案,并且可能适用于任何使用 [=13= 中的单独 .ini 文件加载其扩展的 PHP 版本]:
#!/bin/sh
function php-no-xdebug {
local temporaryPath="$(mktemp -t php-no-debug)"
find /opt/local/etc//php.ini /opt/local/var/db//*.ini ! -name xdebug.ini | xargs cat > "$temporaryPath"
php -n -c "$temporaryPath" "${@:2}"
rm -f "$temporaryPath"
}
alias composer="php-no-xdebug php56 ~/bin/composer"
我通常为每个项目创建一个 shell 脚本,因为每个项目都有另一个 PHP 版本。它位于 composer.phar
和 composer.json
旁边的 /bin/
目录中,我 运行 在我的项目目录中将其作为 ./bin/composer
。
看起来像这样(对于 php56)
#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
COMPOSER_DISABLE_XDEBUG_WARN=1 /opt/local/bin/php56 \
-d xdebug.remote_enable=0 -d xdebug.profiler_enable=0 \
-d xdebug.default_enable=0 $DIR/../composer.phar "$@"
-d
选项有效地禁用了 xdebug。 COMPOSER_DISABLE_XDEBUG_WARN=1
部分禁用警告作曲家问题。
最好禁用 xdebug 扩展(参见 composer troubleshooting),但我个人更喜欢更简单的脚本。
我机器上的一些计时:
2个
运行 与 xdebug 和 ini-enabled: 1m33
运行 使用 xdebug 但 ini-disabled: 0m19
运行 没有 xdebug: 0m10
通过创建别名,您将抑制 composer
xdebug
错误消息。
只需将此行添加到系统中的 ~/.bash_aliases
中,它应该可以完美运行。
alias composer="php -n /usr/local/bin/composer"
重新加载 shell 以使新别名 composer
可用。
source ~/.bash_profile
用法:
$ composer --version
注意:
您不一定需要使用任何其他参数。
根据您的系统,您可能有 .bashrc
而不是 .bash_profile
。
更新:
正如@AlexanderKachkaev 在评论中提到的那样,添加 memory_limit 以避免在某些情况下崩溃是毫无意义的:
alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
此命令将禁用 CLI(以及 composer)的 PHP5 Xdebug 模块:
sudo php5dismod -s cli xdebug
它从 /etc/php5/cli/conf.d/
中删除 xdebug.ini 符号链接
这是在 http://blog.lorenzbausch.de/2015/02/10/php-disable-xdebug-for-cli/
上建议的
请注意,对于 Ubuntu 16.04,您可能需要 运行 像这样:
sudo phpdismod -s cli xdebug
直接操作PHP配置
这是我在 Mac OS X 上 Homebrew-installed PHP 安装的贡献。
它是一个 shell 脚本包装器,旨在作为可执行文件保存在 /usr/local/bin/composer
,Composer 二进制文件位于 /usr/local/bin/composer.phar
:
#!/bin/sh
sed -i '' -e 's:zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":;zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":' /usr/local/etc/php/5.5/conf.d/ext-xdebug.ini
/usr/local/bin/php /usr/local/bin/composer.phar "$@"
sed -i '' -e 's:;zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":' /usr/local/etc/php/5.5/conf.d/ext-xdebug.ini
操作原理
封装脚本:
- 使用sed临时修改配置文件,禁用Xdebug(第2行)
- 执行 Composer,将参数传递给命令(第 3 行)
- 使用sed恢复配置文件,重新启用Xdebug(第4行)
该脚本与 PHP 5.5 的 OS X/Homebrew 安装耦合。应调整路径以与其他 PHP 版本和其他操作系统和包管理器的目录布局一起使用。另请注意,某些版本的 sed 不需要 -i
选项后的空字符串参数。
注意实用程序
脚本很简单,因为它直接在主 PHP 配置文件上工作,然而 这也是一个缺点:Xdebug 也将被禁用恰好与该脚本同时执行的脚本。
在我的开发环境中,这是一个可以接受的权衡,因为 Composer 是手动执行的,而且只是偶尔执行;但是,如果将 Composer 作为自动部署过程的一部分执行,您可能不想使用此技术。
更新:对于 Xdebug 3+:
从 Xdebug 3 开始,可以通过将选项 xdebug.mode
设置为 off
或通过设置环境变量 XDEBUG_MODE=off
.[=20= 来完全禁用 Xdebug ]
通过别名 composer
.
为 composer 禁用 Xdebug 非常容易
alias composer='XDEBUG_MODE=off \composer'
或
alias composer='php -dxdebug.mode=off $(where composer | fgrep -v composer: | head -1)'
您可以将别名添加到您的 $HOME/.bashrc
以使其永久化。
更新:对于 Xdebug 1.3 - 3.0.0:
此问题已在 Composer 1.3 中修复。通过执行 composer self-update
将 composer 更新到最新版本,而不是尝试以下解决方法。
对于 Xdebug < 1.3
这是我对@ezzatron 代码的修改。我已经更新了脚本以从 phpinfo 输出中检测 ini 文件。
#!/bin/sh
php_no_xdebug () {
temporaryPath="$(mktemp -t php.XXXX).ini"
# Using awk to ensure that files ending without newlines do not lead to configuration error
php -i | grep "\.ini" | grep -o -e '\(/[a-z0-9._-]\+\)\+\.ini' | grep -v xdebug | xargs awk 'FNR==1{print ""}1' | grep -v xdebug > "$temporaryPath"
php -n -c "$temporaryPath" "$@"
rm -f "$temporaryPath"
}
php_no_xdebug /usr/local/bin/composer.phar $@
# On MacOS with composer installed using brew, comment previous line
# Install jq by executing `brew install jq` and uncomment following line.
# php_no_xdebug /usr/local/Cellar/composer/`brew info --json=v1 composer | jq -r '.[0].installed[0].version'`/libexec/composer.phar $@
在大多数情况下,您不需要在 CLI 模式下使用 xdebug。如果这对您来说可以接受,那么您可以不同地配置 cli 和 cgi。
所以如果你让 php-cli.ini 和 conf-cli.d 接近退出php.ini 文件比你可以不同地配置 cli 和 cgi(对于 cgi 它将是 php.ini 和 conf.d).只是不要将 xdebug.ini 放入 conf-cli.d。
如果你在 OS X 上使用 brew 安装 composer
您可以使用此别名:
alias composer="php -n $(cat $(which composer) | grep composer.phar | awk '{print }')"
我为基于 Windows 的 Composer 安装程序提出了一个解决方案 - 它应该适用于任何 Composer 安装,它基本上只是复制加载的 INI 文件并注释掉 xdebug zend 扩展,然后在运行 composer 时加载该配置文件。
我已经打开了一个问题,看看他们是否愿意整合这个变化:
https://github.com/composer/windows-setup/issues/58
你可以在那里找到我的说明和代码。
我的 macports 安装的快速解决方案,具有多个 PHP 版本,是为 Composer 编写这个简单的 shell 包装器:
/user/local/bin/composer-nodebug.sh
#!/bin/bash
sudo mv /opt/local/var/db/php53/xdebug.ini /opt/local/var/db/php53/xdebug.NOT
sudo mv /opt/local/var/db/php54/xdebug.ini /opt/local/var/db/php54/xdebug.NOT
sudo mv /opt/local/var/db/php55/xdebug.ini /opt/local/var/db/php55/xdebug.NOT
composer
sudo mv /opt/local/var/db/php53/xdebug.NOT /opt/local/var/db/php53/xdebug.ini
sudo mv /opt/local/var/db/php54/xdebug.NOT /opt/local/var/db/php54/xdebug.ini
sudo mv /opt/local/var/db/php55/xdebug.NOT /opt/local/var/db/php55/xdebug.ini
然后 运行 任何作曲家命令如下:
sudo composer-nodebug.sh update
缺点:
- 需要 sudo(除非您对 INI 文件进行 chmod)
- 如果你中途终止它,INI 文件会被修改
- 需要添加未来 PHP 个版本。
- 同时 运行 其他 PHP 进程受到影响
不优雅,但简单。
这是我摆脱 PHP5-cli 版本上的 Xdebug 警告的快速解决方案。我在 Ubuntu 14.04.
上移除了 Xdebug 对 PHP5-cli 的支持
cd /etc/php5/cli/conf.d/
sudo rm 20-xdebug.ini
现在 PHP5-cli 上不再有 Xdebug 警告。
如果您使用 PHPStorm,最新版本 (2016.2) 附带了一项功能,可以按需为 CLI 脚本启用 XDebug,这意味着您只需在开发机器上全局关闭 XDebug。 IDE 将在项目中的代码需要时即时启用它。
PhpStorm 2016.2 introduces Xdebug On Demand mode where you can disable Xdebug for your global PHP install, and PhpStorm will only enable it when it needs to — when you’re debugging your scripts, or when you need code coverage reports.
您需要编辑 PHP Interpreters 首选项以包含 XDebug 的路径,如链接文章中所述。
对我来说,这似乎是完美的解决方案,因为我通常只在 IDE 中才需要 XDebug。
然而,当您 "offline" 例如,XDebug 确实有其他潜在用途。错误日志中的扩展堆栈转储,您可以通过全局关闭它来丢失这些信息。当然,您不应该在生产环境中启用 XDebug,因此这仅限于开发中的 beta 测试或自动测试 CLI 脚本等用例。
而不是混淆临时启用或禁用 [=32=] 模块,当您可能有使用 PHP 的并发进程(例如作为 CI 管道的一部分)时,您可以告诉 PHP 指向不同的模块加载目录。
虽然这与上面提到的一些解决方案类似,但它解决了一些边缘情况,这在被 Jenkins 或其他 CI 在同一台机器上同时运行测试的运行器使用时非常有用。
最简单的方法是使用环境变量 PHP_INI_SCAN_DIR
在脚本或构建任务中使用它很简单:
export PHP_INI_SCAN_DIR=/etc/php.d.noxdebug
php composer install
当然你会想先准备 /etc/php.d.noxdebug,做这样的事情:
mkdir /etc/php.d.noxdebug
cp /etc/php.d/* /etc/php.d.noxdebug
rm /etc/php.d.noxdebug/xdebug.ini
这意味着您的环境类似于旧的 php 环境,只缺少一个模块。这意味着您无需像使用 php -n 解决方案那样担心需要加载 phar/json 模块。
如 中所述,此问题在最新版本的 Composer 中已不存在。
Composer 文档已更新至 note this。它详细说明了如何使用 Composer 启用 xdebug(如果需要)。
您可以使用 self-update.
更新您的 Composer 版本
在我的 Mac 上我必须做:sudo php /opt/local/bin/composer self-update
可以在 this issue.
中找到关于 Homebrew PHP 安装的更多详细信息
为 composer 创建别名以禁用 xdebug 并防止内存错误:
将此行添加到您的 ~/.bash_profile
alias composer='php -d xdebug.profiler_enable=0 -d memory_limit=-1 /usr/local/bin/composer'
重新启动终端以使新别名可用。
(Windows)
基于documentation我使用了环境变量PHPRC
,所以我可以选择加载哪个INI文件,这样我就可以选择是否要在执行命令之前启用或禁用Xdebug(喜欢 composer install
).
我有两个 INI 文件,一个启用了 Xdebug (php-xdebug.ini
),一个禁用了 Xdebug (php.ini
- 它也是默认的)。
我使用了一些批处理(放置在 PATH
环境变量中包含的位置,因此可以从任何地方执行):
为了启用 Xdebug,我调用 xon.bat
:
@ECHO OFF
set PHPRC=C:/path-to-php/php-xdebug.ini
要禁用 Xdebug,我调用 xoff.bat
:
@ECHO OFF
set PHPRC=
通过调用 php --ini
我可以检查加载了哪个 INI 文件。
或者,您可以使用环境变量 PHP_INI_SCAN_DIR
,您可以在其中设置一个目录路径,从中可以加载其他 INI 文件。优点是可以加载多个INI文件。
您可以通过设置环境变量来禁用 Xdebug:
XDEBUG_MODE=off composer install
可以使用 XDebug 3。
当 运行 composer diagnose
时,出现以下错误:
The xdebug extension is loaded, this can slow down Composer a little. Disabling it when using Composer is recommended.
如何才能仅在我是 运行 Composer 时禁用 xdebug?
我认为没有配置选项 PHP 所以它可以根据目标脚本加载不同的配置。至少,不是没有复制 .ini 文件...
但是,当 运行 作曲家使用 php 时,您可以添加这些选项:
php -n -d extension=needed_ext.so composer.phar
-n
会告诉 PHP 忽略任何 php.ini。这将阻止 xdebug 为这个命令加载。
-d
选项允许您添加任何您想要的选项(例如,激活 needed_ext.so)。您可以使用多个 -d
选项。当然,这是可选的,你可能不需要它。
然后你可以创建一个别名,让它再次变甜。
一个典型的解决方案(因为composer需要json):
php -n -d extension=json.so composer.phar
greg0ire > 我的解决方案,基于此:
#!/bin/bash
options=$(ls -1 /usr/lib64/php/modules| \
grep --invert-match xdebug| \
# remove problematic extensions
egrep --invert-match 'mysql|wddx|pgsql'| \
sed --expression 's/\(.*\)/ --define extension=/'| \
# join everything together back in one big line
tr --delete '\n'
)
# build the final command line
php --no-php-ini $options ~/bin/composer $*
alias composer=/path/to/bash/script.sh
它看起来很难看(我尝试使用 xargs 做到这一点但失败了),但是有效……不过我不得不禁用一些扩展,否则我会收到以下警告:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysqli.so' - /usr/lib64/php/modules/mysqli.so: undefined symbol: mysqlnd_connect in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_mysql.so' - /usr/lib64/php/modules/pdo_mysql.so: undefined symbol: pdo_parse_params in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_pgsql.so' - /usr/lib64/php/modules/pdo_pgsql.so: undefined symbol: pdo_parse_params in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/wddx.so' - /usr/lib64/php/modules/wddx.so: undefined symbol: php_XML_SetUserData in Unknown on line 0
我想出了一个适用于 OSX 的答案,并且可能适用于任何使用 [=13= 中的单独 .ini 文件加载其扩展的 PHP 版本]:
#!/bin/sh
function php-no-xdebug {
local temporaryPath="$(mktemp -t php-no-debug)"
find /opt/local/etc//php.ini /opt/local/var/db//*.ini ! -name xdebug.ini | xargs cat > "$temporaryPath"
php -n -c "$temporaryPath" "${@:2}"
rm -f "$temporaryPath"
}
alias composer="php-no-xdebug php56 ~/bin/composer"
我通常为每个项目创建一个 shell 脚本,因为每个项目都有另一个 PHP 版本。它位于 composer.phar
和 composer.json
旁边的 /bin/
目录中,我 运行 在我的项目目录中将其作为 ./bin/composer
。
看起来像这样(对于 php56)
#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
COMPOSER_DISABLE_XDEBUG_WARN=1 /opt/local/bin/php56 \
-d xdebug.remote_enable=0 -d xdebug.profiler_enable=0 \
-d xdebug.default_enable=0 $DIR/../composer.phar "$@"
-d
选项有效地禁用了 xdebug。 COMPOSER_DISABLE_XDEBUG_WARN=1
部分禁用警告作曲家问题。
最好禁用 xdebug 扩展(参见 composer troubleshooting),但我个人更喜欢更简单的脚本。
我机器上的一些计时: 2个 运行 与 xdebug 和 ini-enabled: 1m33
运行 使用 xdebug 但 ini-disabled: 0m19
运行 没有 xdebug: 0m10
通过创建别名,您将抑制 composer
xdebug
错误消息。
只需将此行添加到系统中的 ~/.bash_aliases
中,它应该可以完美运行。
alias composer="php -n /usr/local/bin/composer"
重新加载 shell 以使新别名 composer
可用。
source ~/.bash_profile
用法:
$ composer --version
注意:
您不一定需要使用任何其他参数。
根据您的系统,您可能有 .bashrc
而不是 .bash_profile
。
更新:
正如@AlexanderKachkaev 在评论中提到的那样,添加 memory_limit 以避免在某些情况下崩溃是毫无意义的:
alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
此命令将禁用 CLI(以及 composer)的 PHP5 Xdebug 模块:
sudo php5dismod -s cli xdebug
它从 /etc/php5/cli/conf.d/
这是在 http://blog.lorenzbausch.de/2015/02/10/php-disable-xdebug-for-cli/
上建议的请注意,对于 Ubuntu 16.04,您可能需要 运行 像这样:
sudo phpdismod -s cli xdebug
直接操作PHP配置
这是我在 Mac OS X 上 Homebrew-installed PHP 安装的贡献。
它是一个 shell 脚本包装器,旨在作为可执行文件保存在 /usr/local/bin/composer
,Composer 二进制文件位于 /usr/local/bin/composer.phar
:
#!/bin/sh
sed -i '' -e 's:zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":;zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":' /usr/local/etc/php/5.5/conf.d/ext-xdebug.ini
/usr/local/bin/php /usr/local/bin/composer.phar "$@"
sed -i '' -e 's:;zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":' /usr/local/etc/php/5.5/conf.d/ext-xdebug.ini
操作原理
封装脚本:
- 使用sed临时修改配置文件,禁用Xdebug(第2行)
- 执行 Composer,将参数传递给命令(第 3 行)
- 使用sed恢复配置文件,重新启用Xdebug(第4行)
该脚本与 PHP 5.5 的 OS X/Homebrew 安装耦合。应调整路径以与其他 PHP 版本和其他操作系统和包管理器的目录布局一起使用。另请注意,某些版本的 sed 不需要 -i
选项后的空字符串参数。
注意实用程序
脚本很简单,因为它直接在主 PHP 配置文件上工作,然而 这也是一个缺点:Xdebug 也将被禁用恰好与该脚本同时执行的脚本。
在我的开发环境中,这是一个可以接受的权衡,因为 Composer 是手动执行的,而且只是偶尔执行;但是,如果将 Composer 作为自动部署过程的一部分执行,您可能不想使用此技术。
更新:对于 Xdebug 3+:
从 Xdebug 3 开始,可以通过将选项 xdebug.mode
设置为 off
或通过设置环境变量 XDEBUG_MODE=off
.[=20= 来完全禁用 Xdebug ]
通过别名 composer
.
alias composer='XDEBUG_MODE=off \composer'
或
alias composer='php -dxdebug.mode=off $(where composer | fgrep -v composer: | head -1)'
您可以将别名添加到您的 $HOME/.bashrc
以使其永久化。
更新:对于 Xdebug 1.3 - 3.0.0:
此问题已在 Composer 1.3 中修复。通过执行 composer self-update
将 composer 更新到最新版本,而不是尝试以下解决方法。
对于 Xdebug < 1.3
这是我对@ezzatron 代码的修改。我已经更新了脚本以从 phpinfo 输出中检测 ini 文件。
#!/bin/sh
php_no_xdebug () {
temporaryPath="$(mktemp -t php.XXXX).ini"
# Using awk to ensure that files ending without newlines do not lead to configuration error
php -i | grep "\.ini" | grep -o -e '\(/[a-z0-9._-]\+\)\+\.ini' | grep -v xdebug | xargs awk 'FNR==1{print ""}1' | grep -v xdebug > "$temporaryPath"
php -n -c "$temporaryPath" "$@"
rm -f "$temporaryPath"
}
php_no_xdebug /usr/local/bin/composer.phar $@
# On MacOS with composer installed using brew, comment previous line
# Install jq by executing `brew install jq` and uncomment following line.
# php_no_xdebug /usr/local/Cellar/composer/`brew info --json=v1 composer | jq -r '.[0].installed[0].version'`/libexec/composer.phar $@
在大多数情况下,您不需要在 CLI 模式下使用 xdebug。如果这对您来说可以接受,那么您可以不同地配置 cli 和 cgi。
所以如果你让 php-cli.ini 和 conf-cli.d 接近退出php.ini 文件比你可以不同地配置 cli 和 cgi(对于 cgi 它将是 php.ini 和 conf.d).只是不要将 xdebug.ini 放入 conf-cli.d。
如果你在 OS X 上使用 brew 安装 composer 您可以使用此别名:
alias composer="php -n $(cat $(which composer) | grep composer.phar | awk '{print }')"
我为基于 Windows 的 Composer 安装程序提出了一个解决方案 - 它应该适用于任何 Composer 安装,它基本上只是复制加载的 INI 文件并注释掉 xdebug zend 扩展,然后在运行 composer 时加载该配置文件。
我已经打开了一个问题,看看他们是否愿意整合这个变化:
https://github.com/composer/windows-setup/issues/58
你可以在那里找到我的说明和代码。
我的 macports 安装的快速解决方案,具有多个 PHP 版本,是为 Composer 编写这个简单的 shell 包装器:
/user/local/bin/composer-nodebug.sh
#!/bin/bash
sudo mv /opt/local/var/db/php53/xdebug.ini /opt/local/var/db/php53/xdebug.NOT
sudo mv /opt/local/var/db/php54/xdebug.ini /opt/local/var/db/php54/xdebug.NOT
sudo mv /opt/local/var/db/php55/xdebug.ini /opt/local/var/db/php55/xdebug.NOT
composer
sudo mv /opt/local/var/db/php53/xdebug.NOT /opt/local/var/db/php53/xdebug.ini
sudo mv /opt/local/var/db/php54/xdebug.NOT /opt/local/var/db/php54/xdebug.ini
sudo mv /opt/local/var/db/php55/xdebug.NOT /opt/local/var/db/php55/xdebug.ini
然后 运行 任何作曲家命令如下:
sudo composer-nodebug.sh update
缺点:
- 需要 sudo(除非您对 INI 文件进行 chmod)
- 如果你中途终止它,INI 文件会被修改
- 需要添加未来 PHP 个版本。
- 同时 运行 其他 PHP 进程受到影响
不优雅,但简单。
这是我摆脱 PHP5-cli 版本上的 Xdebug 警告的快速解决方案。我在 Ubuntu 14.04.
上移除了 Xdebug 对 PHP5-cli 的支持cd /etc/php5/cli/conf.d/
sudo rm 20-xdebug.ini
现在 PHP5-cli 上不再有 Xdebug 警告。
如果您使用 PHPStorm,最新版本 (2016.2) 附带了一项功能,可以按需为 CLI 脚本启用 XDebug,这意味着您只需在开发机器上全局关闭 XDebug。 IDE 将在项目中的代码需要时即时启用它。
PhpStorm 2016.2 introduces Xdebug On Demand mode where you can disable Xdebug for your global PHP install, and PhpStorm will only enable it when it needs to — when you’re debugging your scripts, or when you need code coverage reports.
您需要编辑 PHP Interpreters 首选项以包含 XDebug 的路径,如链接文章中所述。
对我来说,这似乎是完美的解决方案,因为我通常只在 IDE 中才需要 XDebug。
然而,当您 "offline" 例如,XDebug 确实有其他潜在用途。错误日志中的扩展堆栈转储,您可以通过全局关闭它来丢失这些信息。当然,您不应该在生产环境中启用 XDebug,因此这仅限于开发中的 beta 测试或自动测试 CLI 脚本等用例。
而不是混淆临时启用或禁用 [=32=] 模块,当您可能有使用 PHP 的并发进程(例如作为 CI 管道的一部分)时,您可以告诉 PHP 指向不同的模块加载目录。
虽然这与上面提到的一些解决方案类似,但它解决了一些边缘情况,这在被 Jenkins 或其他 CI 在同一台机器上同时运行测试的运行器使用时非常有用。
最简单的方法是使用环境变量 PHP_INI_SCAN_DIR
在脚本或构建任务中使用它很简单:
export PHP_INI_SCAN_DIR=/etc/php.d.noxdebug
php composer install
当然你会想先准备 /etc/php.d.noxdebug,做这样的事情:
mkdir /etc/php.d.noxdebug
cp /etc/php.d/* /etc/php.d.noxdebug
rm /etc/php.d.noxdebug/xdebug.ini
这意味着您的环境类似于旧的 php 环境,只缺少一个模块。这意味着您无需像使用 php -n 解决方案那样担心需要加载 phar/json 模块。
如
Composer 文档已更新至 note this。它详细说明了如何使用 Composer 启用 xdebug(如果需要)。
您可以使用 self-update.
更新您的 Composer 版本在我的 Mac 上我必须做:sudo php /opt/local/bin/composer self-update
可以在 this issue.
中找到关于 Homebrew PHP 安装的更多详细信息为 composer 创建别名以禁用 xdebug 并防止内存错误:
将此行添加到您的 ~/.bash_profile
alias composer='php -d xdebug.profiler_enable=0 -d memory_limit=-1 /usr/local/bin/composer'
重新启动终端以使新别名可用。
(Windows)
基于documentation我使用了环境变量PHPRC
,所以我可以选择加载哪个INI文件,这样我就可以选择是否要在执行命令之前启用或禁用Xdebug(喜欢 composer install
).
我有两个 INI 文件,一个启用了 Xdebug (php-xdebug.ini
),一个禁用了 Xdebug (php.ini
- 它也是默认的)。
我使用了一些批处理(放置在 PATH
环境变量中包含的位置,因此可以从任何地方执行):
为了启用 Xdebug,我调用 xon.bat
:
@ECHO OFF
set PHPRC=C:/path-to-php/php-xdebug.ini
要禁用 Xdebug,我调用 xoff.bat
:
@ECHO OFF
set PHPRC=
通过调用 php --ini
我可以检查加载了哪个 INI 文件。
或者,您可以使用环境变量 PHP_INI_SCAN_DIR
,您可以在其中设置一个目录路径,从中可以加载其他 INI 文件。优点是可以加载多个INI文件。
您可以通过设置环境变量来禁用 Xdebug:
XDEBUG_MODE=off composer install
可以使用 XDebug 3。