diff --git a/bin/composer b/bin/composer index 33a9a8661..5899be19c 100755 --- a/bin/composer +++ b/bin/composer @@ -9,7 +9,28 @@ error_reporting(-1); if (function_exists('ini_set')) { @ini_set('display_errors', 1); - @ini_set('memory_limit', '512M'); + + $memoryInBytes = function ($value) { + $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 512M + if ($memoryLimit != -1 && $memoryInBytes($memoryLimit) < 512 * 1024 * 1024) { + @ini_set('memory_limit', '512M'); + } + unset($memoryInBytes, $memoryLimit); } // run the command application diff --git a/doc/articles/troubleshooting.md b/doc/articles/troubleshooting.md new file mode 100644 index 000000000..fd83070bf --- /dev/null +++ b/doc/articles/troubleshooting.md @@ -0,0 +1,27 @@ + +# Memory limit errors + +If composer shows memory errors on some commands: + + PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted <...> + +The `memory_limit` ini value should be increased. + +> **Note:** Composer internally increases the memory_limit to 512M. +> 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;" + +Increase limit with `php.ini` for a `CLI SAPI` (ex. `/etc/php5/cli/php.ini` for Debian-like systems): + + ; Use -1 for unlimited or define explicit value like 512M + memory_limit = -1 + +Or with command line arguments: + + php -d memory_limit=-1 composer.phar <...> +