通过PHP脚本下载composer


Downloading composer via PHP script

我有一个php脚本下载composer.phar.

下载后,我运行exec()安装包。

文件夹结构为

--ROOT
  --public
--composer.josn
但是,当我运行 时

exec('php composer.phar install -d ' . dirname(__DIR__), $out, $return);

我得到的输出是:
array(5) {
  [0]=>
  string(39) "All settings correct for using Composer"
  [1]=>
  string(14) "Downloading..."
  [2]=>
  string(0) ""
  [3]=>
  string(80) "Composer successfully installed to: /var/www/projects/funny/public/composer.phar"
  [4]=>
  string(25) "Use it: php composer.phar"
}

没有安装供应商的包。

澄清一下。此时phar存档文件已经下载,那么它现在正在下载什么?运行此命令后,下载的phar的大小也从200k变为900k。

这里是下载和安装的完整代码:
$composer_path = __DIR__ . '/composer.phar';
$ch = curl_init();
$fh = fopen($composer_path, 'x');
curl_setopt_array($ch, array(
    CURLOPT_URL => 'https://getcomposer.org/installer',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_FILE => $fh
));
$output = curl_exec($ch);
curl_close($ch);
fclose($fh);
exec('php composer.phar install -d ' . dirname(__DIR__), $out, $return);
上面的代码是从public
中的文件运行的
这里是下载和安装的完整代码:

该代码下载了Composer安装程序,但没有下载Composer本身!如果您运行该下载,您将执行安装程序,该安装程序将尝试下载Composer。您不能使用安装程序下载Composer依赖项。

-d实际上在做什么?这不是编译器文档中的参数。我的猜测是,这被解释为某种演练标志,因此实际上没有文件受到影响。尝试将目录in更改为要执行composer的目录,然后在不使用-d的情况下执行它。

例如:

exec('cd '.dirname(__DIR__).' && php '.$composer_path.' install', $out, $return);