【问题标题】:Downloading composer via PHP script通过 PHP 脚本下载作曲家
【发布时间】:2014-07-02 12:10:16
【问题描述】:

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

下载后我运行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

中的一个文件运行的

【问题讨论】:

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


    【解决方案1】:

    以下是下载和安装的完整代码:

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

    【讨论】:

      【解决方案2】:

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

      例如:

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

      【讨论】:

      • 我的错,没有意识到还有一些全局选项
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2016-06-07
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2014-06-16
      相关资源
      最近更新 更多