composer私有仓库搭建之系列二:web页面实现仓库列表更新

诉求:在仓库列表显示的页面上,添加一个更新的按钮,实现仓库更新

分析:仓库生成或者更新的列表的命令是

全量生成或者更新:
php bin/satis build satis.json public/

指定生成或者更新
php bin/satis build satis.json public/ test/test1 test/test2

可以通过php的shell_exec函数实现此功能

主要代码如下:

全量生成或者更新:

<?php
$output = shell_exec('php /data/wwwroot/satis/bin/satis build /data/wwwroot/satis/satis.json /data/wwwroot/satis/public/');
echo "<pre><p style='backgroud-color:#ccc;'>$output</p></pre>";
exit();

指定生成或者更新

<?php
//获取包名,注意此处的安全性处理,我这里就略过了
if (! empty($_REQUEST)) {
    $packName = $_REQUEST['packName'];
    //指定包生成或者更新
    $output   = shell_exec('php /data/wwwroot/satis/bin/satis build /data/wwwroot/satis/satis.json /data/wwwroot/satis/public/ ' . $packName);
    echo "<pre><p style='backgroud-color:#ccc;'>$output</p></pre>";
    exit();
}

注意几点问题 

1.权限问题

因为网页版更新,是通过nginx+php-fpm来处理,所以注意php-fpm服务的启动用户,我的是www用户

a.首先确保你有www用户,没有的话需要提前创建www用户,这里就不赘述了;

b.其次要确保www用户有php的可执行权限,可以通过shell_exec('php -i');测试是否有可执行权限

c.是否有目录的可执行权限,涉及到的目录有

/data/wwwroot/satis/bin/satis 
/data/wwwroot/satis/satis.json 
/data/wwwroot/satis/public/

2.用户密码问题

首次执行之前,需要在服务器上通过php的cli模式手动触发一次,这个主要目的就是存储账号和密码,因为命令在执行时候会拉取代码,这个时候会提示输入gitlab的账号和密码,记得选择yes就行了,账号或者密码一般会存储在用户的家目录下.composer目录里面

这样在网页点击更新按钮的时候就可以正常更新了。

如果过程中遇到问题,主要可能是shell_exec,执行报错,可以通过输出错误结果进行排查

<?php
//命令行后面跟上2>&1,中间有空格,就可以输出整个命令执行的结果
$output   = shell_exec('php /data/satis/composer/bin/satis build /data/wwwroot/satis/satis.json /data/wwwroot/satis/public/ 2>&1');
print_r($output);
原文地址:https://www.cnblogs.com/joshua317/p/13118154.html