资讯专栏INFORMATION COLUMN

解决 Composer 运行时的 Xdebug 冲突

xuexiangjys / 2431人阅读

摘要:换句话说对我们程序调试来说非常重要,但对来说却增加了内存占用和进程时间。官网给出了解决方案下面我讲讲我的排错思路。方法通过配置文件,全局禁用。首先,这肯定是一个因为启用了导致的冲突,我们要找到在哪里启用了。

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,完美解决。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30411.html

相关文章

  • PHPUnit 加速技巧分享

    摘要:接下来我们将会介绍一些可以快速实现的小技巧,让你的代码测试变得更快。该示例测试套件有意地模拟更广泛的测试集合,并突出改进的可行性。真实情况下,效率的提升可能有所差异。我认为相比通过提升一点速度带来的好处,保持生产环境一致更重要。 showImg(https://segmentfault.com/img/remote/1460000017962057?w=1440&h=736); 具备高...

    weizx 评论0 收藏0
  • [进阶篇]docker编排PHP开发坏境

    摘要:开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括虚拟机集群和其他的基础应用平台。容器进入容器名暴露端口暴露端口使用调试环境中安装了调试,需对进行配置后启用,配置如下配置完成后需要重启下容器。 showImg(https://segmentfault.com/img/bVbgmdS?w=567&h=272); Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻...

    PingCAP 评论0 收藏0
  • [进阶篇]docker编排PHP开发坏境

    摘要:开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括虚拟机集群和其他的基础应用平台。容器进入容器名暴露端口暴露端口使用调试环境中安装了调试,需对进行配置后启用,配置如下配置完成后需要重启下容器。 showImg(https://segmentfault.com/img/bVbgmdS?w=567&h=272); Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻...

    kevin 评论0 收藏0
  • Docker快速搭建一套PHP、Nginx、MySQL、Redis、Xdebug、Memcached

    摘要:痛点如何简单迅速地初始化一个全新的开发环境呢笔者在尝试起一个新项目时,往往会陷入重新建立一套环境的繁琐事当中。架构本片文章搭建出来的环境如上图。网络这部分,为了便于配置就手动分配了。配置开启记录了一般性的查询日志,便于程序。 痛点 如何简单迅速地初始化一个全新的PHP开发环境呢? 笔者在尝试起一个新web项目时,往往会陷入重新建立一套Docker环境的繁琐事当中。我想大家在开始做一个新...

    VioletJack 评论0 收藏0
  • Docker快速搭建一套PHP、Nginx、MySQL、Redis、Xdebug、Memcached

    摘要:痛点如何简单迅速地初始化一个全新的开发环境呢笔者在尝试起一个新项目时,往往会陷入重新建立一套环境的繁琐事当中。架构本片文章搭建出来的环境如上图。网络这部分,为了便于配置就手动分配了。配置开启记录了一般性的查询日志,便于程序。 痛点 如何简单迅速地初始化一个全新的PHP开发环境呢? 笔者在尝试起一个新web项目时,往往会陷入重新建立一套Docker环境的繁琐事当中。我想大家在开始做一个新...

    voyagelab 评论0 收藏0

发表评论

0条评论

xuexiangjys

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<