通过PHP脚本下载composer

时间:2014-07-02 12:10:17

标签: php shell curl composer-php command-line-interface

我有一个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);

以上代码是从公开

中的文件运行的

2 个答案:

答案 0 :(得分:0)

什么是-d实际上在做什么?这不是作曲家文档中的参数。我的猜测是,这被解释为某种干运行标志,因此实际上没有文件受到影响。尝试将目录更改为要执行编写器的目录,然后在不使用-d。

的情况下执行它

e.g:

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

答案 1 :(得分:0)

  
    

下载并安装完整代码:

  

该代码确实下载了Composer INSTALLER,但不是Composer本身!如果运行该下载,则执行安装程序,尝试下载Composer。您无法使用安装程序下载Composer依赖项。