PHP composer xdebug 警告

PHP composer xdebug warning

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

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

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

与网络脚本一样,预计 CLI 脚本也会 运行 变慢。

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

I do not want to disable xdebug when I am developing. Just wanted to confirm that running xdebug in dev environment should have no impact on the composer installing libraries/performance of the app on the production server.

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

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


如何为 Composer 运行s 禁用 Xdebug?

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

助手是一个 bash 或批处理脚本调用 PHP 自定义 php.ini,特别为 Composer 配置。让我们称之为:php.ini-composer.

您可以复制当前 php.ini 并针对 Composer 运行 进行调整,方法是删除 xdebug 或将其注释掉,如下所示:;zend_extension = "/path/to/my/xdebug.so"

当你在做的时候:设置 memory_limit=-1 也很有帮助。

完整的命令在 Windows 上看起来像这样:php.exe -c php.ini-composer composer.phar %*

只需克隆 bash 脚本的想法。


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

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

几个小时前 added/updated。


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

在某处创建一个名为 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 文件

在全新下载的 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 标志允许您动态设置配置值,因此您可以包含扩展。

现代版本的 Composer 可以解决默认为 CLI SAPI 启用 XDebug 的问题。它会生成一个新的 PHP 进程,并在检测到它时禁用 XDebug 扩展。

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

COMPOSER_ALLOW_XDEBUG=1

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

要解决此问题,在 PHP 之前,有 7 个人会建议从您的 php.ini 文件中注释掉扩展名。 然而,在 PHP 7 他们已经不在了。

相反,我们使用 phpdismod 命令。

sudo phpdismod -s cli xdebug

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

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

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