diff --git a/bin/composer b/bin/composer index f65da48d8..7a0f8dbf5 100755 --- a/bin/composer +++ b/bin/composer @@ -8,6 +8,31 @@ use Composer\Console\Application; error_reporting(-1); @ini_set('display_errors', 1); +$memoryInBytes = function ($value) { + //$memoryLimit = ini_get('memory_limit'); + + $unit = strtolower(substr($value, -1, 1)); + $value = (int) $value; + switch($unit) { + case 'g': + $value *= 1024; + case 'm': + $value *= 1024; + case 'k': + $value *= 1024; + } + + return $value; +}; + +$memoryLimit = trim(ini_get('memory_limit')); +// Increase memory_limit if it is lower than 256M +if ($memoryLimit != -1 && $memoryInBytes($memoryLimit) < 256 * 1024 * 1024) { + @ini_set('memory_limit', '256M'); + printf('Warning: memory_limit was increased from %s to %s' . PHP_EOL . PHP_EOL, $memoryLimit, '256M'); +} +unset($memoryInBytes); + // run the command application $application = new Application(); $application->run(); diff --git a/doc/articles/troubleshooting.md b/doc/articles/troubleshooting.md index 9e3cb06a2..ecf4d239b 100644 --- a/doc/articles/troubleshooting.md +++ b/doc/articles/troubleshooting.md @@ -9,6 +9,9 @@ If composer shows memory errors on some commands: The `memory_limit` ini value should be increased. +> **Note:** Composer internaly increases the memory_limit to 256M. +> It is a good idea to create an issue for composer if you get memory errors. + Get current value: php -r "echo ini_get('memory_limit').PHP_EOL;"