PHP 内存不足错误不会反映 memory_limit 中的 php.ini 设置

PHP out of memory error does not reflect memory_limit setting in php.ini

当我尝试使用 Composer 客户端将软件包安装到 Contao 时出现错误:

Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 134217728 bytes) in phar://D:/wamp/www/myproject/composer/composer.phar/src/Composer/DependencyResolver/Solver.php on line 220

真的很困惑。我的 PHP 内存限制设置为 512M。 phpinfo() 确认。但是 1073741824 是一个千兆字节!它仍然不够,就好像脚本完全无视 PHP 内存限制(在哪里?),甚至 1 GB 也不够!?!?

我能做什么?我阅读了 RLimitMEM,但我在 WAMPServer 上的任何地方都找不到这样的设置。

我找到了答案。

我在项目中搜索 memory_limit,发现作曲家客户端试图在 system/modules/!composer/src/Runtime.php 中设置内存限制 有这一行:@ini_set('memory_limit', '1024M'); 我将其更改为 @ini_set('memory_limit', '2048M'); 本质上是可用内存加倍,而且它起作用了。

建议对 composer 客户端使用所谓的分离模式。如果您有合适的 CLI 环境可用,您将有 no 内存限制和 no 最大执行时间。此外,这两个限制都可以通过命令行参数进行控制。

但是,这并不适用于所有托管环境。有关详细信息,请参阅此 Wiki 条目:https://github.com/contao-community-alliance/composer-client/wiki/Execution-modes