【问题标题】:PHP composer xdebug warningPHP 作曲家 xdebug 警告
【发布时间】:2016-02-27 19:59:19
【问题描述】:

PHP 新手。处理 PHP 项目并启用 xdebug 以便能够调试我的 php 应用程序。生产服务器没有启用 xdebug,因为它由另一个团队处理。在我的本地机器上,当我运行 Composer 时,它会给我一个警告说

You are running composer with xdebug enabled. This has a major impact on 
runtime performance.

我不想在开发时禁用 xdebug。只是想确认在开发环境中运行 xdebug 应该对作曲家在生产服务器上安装库/应用程序的性能产生没有影响

【问题讨论】:

  • 您是直接在生产服务器上还是在本地机器上运行 composer install(用于在生产服务器上安装生产依赖项)在 ssh-shell 中?如果启用 XDebug,后者会更慢,但您可能需要 XDebug,例如PHPUnit...

标签: php composer-php xdebug


【解决方案1】:

我不想在开发时禁用 xdebug。只是想确认在开发环境中运行 xdebug 应该没有影响作曲家在生产服务器上安装库/应用程序的性能。

仅加载 Xdebug 会产生巨大的影响。即使未启用分析功能,它也会将 Composer 的运行速度减慢 3 倍或 4 倍。

换句话说:xdebug 对于调试来说是无价的,但会增加 Composer 的内存使用和处理时间。


如何为 Composer 运行禁用 Xdebug?

我的建议是编写一个小的调用助手来运行 Composer。

帮助程序是一个使用自定义php.ini 调用 PHP 的 bash 或批处理脚本,专门为 Composer 配置。让我们称之为:php.ini-composer

您可以复制当前的php.ini 并通过删除 xdebug 或将其注释掉来调整它以适应 Composer 运行,如下所示:;zend_extension = "/path/to/my/xdebug.so"

当您使用它时:设置memory_limit=-1 也很有帮助。

完整的命令在 Windows 上如下所示:php.exe -c php.ini-composer composer.phar %*

只需克隆一个 bash 脚本的想法。


您可以在 Composer 常见问题解答中找到您问题的完整答案。

https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer

它是在几个小时前添加/更新的。


还提到了一些替代方案(而不是使用单独的 ini 文件)here

【讨论】:

  • 只是再次确认 - 它对应用程序在未安装 xdebug 的生产服务器上的实际运行没有影响?我不介意作曲家慢。
  • 已确认。没有影响,如果没有加载! (此外:您始终可以通过将加载的扩展数量减少到应用程序所需的绝对最小值来加快生产系统的速度。)
【解决方案2】:

现代版本的 Composer 可以在默认情况下为 CLI SAPI 启用 XDebug。如果检测到它,它会生成一个禁用 XDebug 扩展的新 PHP 进程。

您可以通过设置以下环境变量来禁用此行为:

COMPOSER_ALLOW_XDEBUG=1

在文档中找到这个:https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer

【讨论】:

  • @ojrask 只是一个问题,我应该在哪里使用这个变量来使它工作?
【解决方案3】:

与 Web 脚本一样,预计 CLI 脚本也会运行得更慢。

如果您需要增加运行时性能,您可以仅在 CLI 上禁用 XDebug。设置您的 PHP 安装,以便它为 CLI 和您的服务器使用不同的 ini 文件,as this answer suggests.

【讨论】:

    【解决方案4】:

    要解决这个问题,在 PHP 7 之前,人们会建议从 php.ini 文件中注释掉扩展名。 但是,在 PHP 7 中它们不再存在。

    相反,我们使用phpdismod 命令。

    sudo phpdismod -s cli xdebug
    

    -s 标志告诉它为 CLI SAPI (/etc/php/7.0/cli) 而不是 FPM 禁用 Xdebug。

    就这样,警告信息应该消失了。无需重启 PHP。

    除此之外,还有一个plugin可以并行下载包以加快安装过程。

    【讨论】:

    • 如果我没记错的话,phpdismod 仅适用于 PHP 7.0,所以如果您需要为任何其他版本禁用 xdebug,请注释所有与 [xDebug] 块相关的行:/etc/php/php_version_here/cli/php.ini并重新启动 php(将 7.4 替换为 PHP 版本以在 CLI 中禁用 xdebug):sudo service php7.4-fpm restart
    • 谢谢,这个命令在我们调试的时候不会禁用xdebug,但还是会去掉警告。
    【解决方案5】:

    在某处创建一个名为php-composer.ini 的文件,内容如下(composer 的最低 php 配置):

    extension_dir = "D:/php/ext/" ;according to your system
    extension=php_openssl.dll
    memory_limit=-1 ;optional
    

    现在创建一个名为cmz.bat 的文件,其内容如下。 (相应地编辑路径)

    @ECHO OFF
    php -c "D:\php-composer.ini" "C:\ProgramData\ComposerSetup\bin\composer.phar" %*
    

    将此文件添加到您的系统路径或项目根目录。 现在使用cmz 而不是composer,您将看不到该消息,希望作曲家的速度会提高。

    注意:有些包需要特定的 php 扩展。您需要将它们添加到php-compsoer.ini 文件或附加--ignore-platform-reqs 切换到cmz.bat 文件

    【讨论】:

      【解决方案6】:

      在全新下载 Symfony 3.1 和 PHP 7.0 时,您可以运行以下命令(已对其进行编辑以包含 composer.phar 文件的路径):

      php -n -d extension=json.so -d extension=phar.so -d extension=pdo.so -d extension=ctype.so /path/to/composer update
      

      如果您的composer.json 文件中有任何额外的供应商,您可能会发现他们依赖于扩展,因此您需要通过将-d extension=name_of_extension.so 添加到列表中来包含它。

      这里发生的情况是-n 标志与 PHP 默认值一起使用 - 它不加载任何 ini PHP 配置文件,因此永远不会加载 XDebug。然后每个-d 标志都允许您动态设置配置值,因此您可以包含扩展。

      【讨论】:

      • 谢谢,我花了很长时间尝试定义多个扩展,例如 -d extension=phar.so;extension=pdo.so;-d extension=phar.so,pdo.so;
      猜你喜欢
      • 2016-02-24
      • 1970-01-01
      • 2015-09-13
      • 2014-12-01
      • 2012-10-06
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      相关资源
      最近更新 更多