1:打开一个socket,数据结构如下:
{
"msg": "true",
"status": 1,
"data": [
{
"name": "pylists云课堂",
"buildno": "1.0.3",
"update_time": 1583679270,
"content": "",
"filezip": "http://v.heimicms.com/fa84cef8d10f76eba043402aea925f4a.zip"
}
]
}
2:客户端代码请求接收filezip文件的地址,读取内容,并将zip压缩文件写入根目录
3:解压文件并覆盖
防范措施:
压缩包的目录结构需要保持一致。 如果使用git或者svnphp写入php文件php写入php文件,最好能实现全量更新和增量更新。
目前压缩包需要单独打包上传到我们自己的云端供客服下载。
PHP 代码片段:
public function appOnlineUpdate()
{
$PyDomain = config("PyDomain");
$url = $PyDomain . '/api/version/vlist';
$updatearr = json_decode(curl_get($url), true)['data'][0];
$filezip = $updatearr['filezip'];
$content = curl_post($filezip);
if (!$content) {
ajaxmsg("源码更新包不存在", 0);
}
$file_path = APPUPDATE_PATH . 'appupdate.zip';
if (file_exists($file_path)) {
unlink($file_path);
}
$fp = fopen($file_path, 'w');
$zipbyte = fwrite($fp, $content);
if ($zipbyte > 0) {
$zip = new ZipArchive();
if ($zip->open($file_path) === TRUE) {
$zip->extractTo(APPUPDATE_PATH);
$zip->close();
$version = Db::name("version")->order("id desc")->find();
$versionData = [];
$versionData['name'] = $updatearr['name'];
$versionData['buildno'] = $updatearr['buildno'];
$versionData['content'] = $updatearr['content'];
$versionData['update_time'] = time();
Db::name("version")->where("id", "=", $version["id"])->update($versionData);
if (file_exists($file_path)) {
unlink($file_path);
}
ajaxmsg("升级成功!", 1);
} else {
ajaxmsg("无法打开压缩文件,检查文件目录权限!", 0);
}
} else {
ajaxmsg("更新失败", 0);
}
}