我有一个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);
以上代码是从公开
中的文件运行的答案 0 :(得分:0)
什么是-d实际上在做什么?这不是作曲家文档中的参数。我的猜测是,这被解释为某种干运行标志,因此实际上没有文件受到影响。尝试将目录更改为要执行编写器的目录,然后在不使用-d。
的情况下执行它e.g:
exec('cd '.dirname(__DIR__).' && php '.$composer_path.' install', $out, $return);
答案 1 :(得分:0)
下载并安装完整代码:
该代码确实下载了Composer INSTALLER,但不是Composer本身!如果运行该下载,则执行安装程序,尝试下载Composer。您无法使用安装程序下载Composer依赖项。