2011-04-17 22:39:28 +00:00
#!/usr/bin/env php
2011-04-17 22:14:44 +00:00
<?php
2018-11-26 11:32:31 +00:00
if (PHP_SAPI !== 'cli' && PHP_SAPI !== 'phpdbg') {
2023-09-29 08:15:51 +00:00
if (0 === strpos(__FILE__, 'phar:') && ini_get('register_argc_argv')) {
echo 'Composer cannot be run safely on non-CLI SAPIs with register_argc_argv=On. Aborting.'.PHP_EOL;
exit(1);
}
2013-04-11 08:23:35 +00:00
echo 'Warning: Composer should be invoked via the CLI version of PHP, not the '.PHP_SAPI.' SAPI'.PHP_EOL;
2013-04-09 08:32:38 +00:00
}
2022-04-06 20:07:16 +00:00
if (PHP_VERSION_ID < 70205) {
echo 'Composer 2.3.0 dropped support for PHP <7.2.5 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
exit(1);
}
2018-05-03 00:17:22 +00:00
setlocale(LC_ALL, 'C');
2012-03-15 12:14:02 +00:00
require __DIR__.'/../src/bootstrap.php';
2011-04-17 22:14:44 +00:00
2011-11-30 20:30:51 +00:00
use Composer\Console\Application;
2017-11-23 15:52:48 +00:00
use Composer\XdebugHandler\XdebugHandler;
2021-06-03 08:17:54 +00:00
use Composer\Util\Platform;
2021-07-22 10:57:55 +00:00
use Composer\Util\ErrorHandler;
2011-04-17 22:14:44 +00:00
2012-05-12 07:41:15 +00:00
error_reporting(-1);
2012-08-24 14:38:01 +00:00
2019-11-03 13:04:38 +00:00
// Restart without Xdebug
2021-04-13 07:59:06 +00:00
$xdebug = new XdebugHandler('Composer');
2016-08-05 10:43:56 +00:00
$xdebug->check();
unset($xdebug);
2019-02-16 16:39:59 +00:00
if (defined('HHVM_VERSION') && version_compare(HHVM_VERSION, '4.0', '>=')) {
echo 'HHVM 4.0 has dropped support for Composer, please use PHP instead. Aborting.'.PHP_EOL;
exit(1);
}
2021-10-27 07:39:15 +00:00
if (!extension_loaded('iconv') && !extension_loaded('mbstring')) {
echo 'The iconv OR mbstring extension is required and both are missing.'
.PHP_EOL.'Install either of them or recompile php without --disable-iconv.'
.PHP_EOL.'Aborting.'.PHP_EOL;
exit(1);
}
2019-02-16 16:39:59 +00:00
2012-08-24 14:38:01 +00:00
if (function_exists('ini_set')) {
2024-12-11 08:24:40 +00:00
// check if error logging is on, but to an empty destination - for the CLI SAPI, that means stderr
$logsToSapiDefault = ('' === ini_get('error_log') && (bool) ini_get('log_errors'));
// on the CLI SAPI, ensure errors are displayed on stderr, either via display_errors or via error_log
if (PHP_SAPI === 'cli') {
@ini_set('display_errors', $logsToSapiDefault ? '0' : 'stderr');
2024-12-10 15:37:56 +00:00
}
2012-08-24 15:39:49 +00:00
2018-01-04 09:49:41 +00:00
// Set user defined memory limit
if ($memoryLimit = getenv('COMPOSER_MEMORY_LIMIT')) {
@ini_set('memory_limit', $memoryLimit);
2020-09-12 19:09:20 +00:00
} else {
$memoryInBytes = function ($value) {
$unit = strtolower(substr($value, -1, 1));
$value = (int) $value;
switch($unit) {
case 'g':
$value *= 1024;
// no break (cumulative multiplier)
case 'm':
$value *= 1024;
// no break (cumulative multiplier)
case 'k':
$value *= 1024;
}
return $value;
};
$memoryLimit = trim(ini_get('memory_limit'));
// Increase memory_limit if it is lower than 1.5GB
if ($memoryLimit != -1 && $memoryInBytes($memoryLimit) < 1024 * 1024 * 1536) {
@ini_set('memory_limit', '1536M');
}
unset($memoryInBytes);
2018-01-04 09:49:41 +00:00
}
2020-09-12 19:09:20 +00:00
unset($memoryLimit);
2012-08-24 14:38:01 +00:00
}
2012-05-11 14:41:41 +00:00
2022-01-07 08:17:25 +00:00
// Workaround PHP bug on Windows where env vars containing Unicode chars are mangled in $_SERVER
// see https://github.com/php/php-src/issues/7896
2022-01-21 09:13:59 +00:00
if (PHP_VERSION_ID >= 70113 && (PHP_VERSION_ID < 80016 || (PHP_VERSION_ID >= 80100 && PHP_VERSION_ID < 80103)) && Platform::isWindows()) {
2022-01-07 12:57:17 +00:00
foreach ($_SERVER as $serverVar => $serverVal) {
if (($serverVal = getenv($serverVar)) !== false) {
$_SERVER[$serverVar] = $serverVal;
}
}
2022-01-07 08:17:25 +00:00
}
2021-06-03 08:23:06 +00:00
Platform::putEnv('COMPOSER_BINARY', realpath($_SERVER['argv'][0]));
2017-01-22 17:26:49 +00:00
2021-07-22 10:57:55 +00:00
ErrorHandler::register();
2011-09-14 12:57:40 +00:00
// run the command application
2011-11-30 20:30:51 +00:00
$application = new Application();
2017-11-23 15:52:48 +00:00
$application->run();