composer 对 phper 来说是个福音,但有时,他也会给我们一些小麻烦,比如下面这个报错:
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
这是一个非常常见的冲突,而且这个冲突对 composer 运行的影响还是蛮大的,当我们启用 Xdebug 功能时,将使得我们的 composer 运行放慢 3-4 倍。换句话说:xdebug 对我们程序调试来说非常重要,但对 composer 来说却增加了内存占用和进程时间。
composer 官网给出了解决方案
下面我讲讲我的排错思路。
方法1:通过 php 配置文件,全局禁用 Xdebug。
首先,这肯定是一个因为启用了 Xdebug 导致的冲突,我们要找到在哪里启用了 Xdebug。
写一个包含 phpinfo()
函数的页面,在浏览器中打开。
配置参数 | 值 |
---|---|
Configuration File (php.ini) Path | /usr/local/etc/php/5.6 |
Loaded Configuration File | /usr/local/etc/php/5.6/php.ini |
Scan this dir for additional .ini files | /usr/local/etc/php/5.6/conf.d |
Additional .ini files parsed | /usr/local/etc/php/5.6/conf.d/ext-igbinary.ini, /usr/local/etc/php/5.6/conf.d/ext-mcrypt.ini, /usr/local/etc/php/5.6/conf.d/ext-redis.ini, /usr/local/etc/php/5.6/conf.d/ext-xdebug.ini |
可见 php 调用了 php.ini
配置文件和 conf.d
目录里面的所有 ini
配置文件。
禁用 php.ini 中的 "xdebug" 模块
用分号注释掉调用语句:
;zend_extension = "/path/to/my/xdebug.so"
去除 Xdebug 相关的配置文件
如果 Xdebug 的调用不在主配置文件 php.ini 中,那么有可能在扩展配置文件夹中,比如我的环境就是如此,见上图表:
我们可以将 conf.d/ext-xdebug.ini
重命名为 ext-xdebug.bak
或者删除。这样 php 服务重启就不会调用了。当面,我们也可以参照上面的步骤,在 conf.d/ext-xdebug.ini
中将相应的 Xdebug 语句注释掉,效果相同。
方法2:通过给 composer 设置别名防止调用 Xdebug
设置别名的需要了解你自己在哪个 shell 环境下,我的机子用的是 zsh ,所以编辑 .zshrc 这个文件即可。
➜ ~ cd
➜ ~ vi .zshrc
然后根据下面两种情况选择一种方式设置你的别名,或者设置两个别名。
调用不含 Xdebug 模块的配置文件
对于 Xdebug 调用在 php.ini 中的情况,我们可以通过复制一份不含 Xdebug 的配置文件(xdebug-disabled-php.ini),然后建立以下别名:
alias comp='php -c /path/to/xdebug-disabled-php.ini /path/to/composer.phar'
不调用任何 php 配置文件
这种方式可以解决像我一样已经将一些扩展配置路径编译进 php 的情况:
# Without php.ini
alias comp='php -n /path/to/composer.phar'
/path/to 为你实际的文件或命令路径
OK ,现在我们执行 composer -V
试试,是否还有错误提示出现。
Good,完美解决。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。