PHP实现在线更新功能/热更新,实例代码 thinkphp在线更新功能

admin5个月前 (09-04)未分类715

PHP实现在线更新功能,一个主方法,一个文件下载方法

线上项目,实测:

public function update() {// 这里省略了版本判断逻辑,根据自己需要去写// 更新包信息$file_url = 'http://uosat.com/v2.zip'; //更新包的下载地址$filename = basename($file_url); //更新包文件名称// 检查和创建文件夹$dir = ROOT_PATH . "runtime/update/";if (!file_exists($dir)) {mkdir($dir, 0777, true);}// 下载更新包到本地并赋值文件路径变量$path = file_exists($dir.$filename)?$dir.$filename:$this->download_file($file_url,$dir,$filename);// 如果下载没成功就返回报错if (!file_exists($dir.$filename)) {return json(["msg" => '文件下载失败!', "code" => 100]);}// PHP解压的扩展类if(!class_exists("\ZipArchive")) return json(['code' => 100, 'msg' => '请安装ZipArchive扩展!']);// 实例化ZipArchive$zip = new \ZipArchive();//打开压缩包if ($zip->open($path) === true) {// 复制根目录,ROOT_PATH在入口文件已经定义了$toPath = ROOT_PATH;try {// 解压文件到toPath路径下,用于覆盖差异文件$zip->extractTo($toPath);// 必须销毁变量,否则会报错unset($zip);// 删除更新包unlink($path);} catch (\Exception $e) {return json(["msg" => "没有[" . $toPath . "]目录的写入权限", "code" => 100]);}//文件差异覆盖完成,开始更新数据库if(file_exists(ROOT_PATH . "/sql.php")){// 这里的数据库是.php文件,是可执行的php代码,不是.sql数据库文件,记住!!!include ROOT_PATH . "/sql.php";chmod(ROOT_PATH . "/sql.php",0777);unlink(ROOT_PATH . "/sql.php");}// 更新完成return json(["msg" => "版本更新完成!", "code" => 200]);} else {// 压缩包打开失败,删除文件并且返回报错unlink($path);return json(["msg" => "更新包解压失败,请重试!", "code" => 100]);}}
/*    * 文件下载方法    * $url 文件下载地址    * $dir 存储的文件夹    * $filename 文件名字    */public function download_file($url, $dir, $filename = '') {if (empty($url)) {return false;}$ext = strrchr($url, '.');$dir = realpath($dir);//目录+文件$filename = (empty($filename) ? '/' . time() . '' . $ext : '/' . $filename);$filename = $dir . $filename;//开始捕捉ob_start();try {readfile($url);} catch (\Exception $e) {return json(["msg" => "文件下载失败,请联系开发人员!", 'code' => 100]);}$img = ob_get_contents();ob_end_clean();$size = strlen($img);$fp2 = fopen($filename, "a");fwrite($fp2, $img);fclose($fp2);return $filename;}

下面给大家介绍下thinkphp更新数据库的五种方法

第一种方法:

$模型->where(‘id=1')->save($data);

第二种方法:

$模型->where(‘id=1')->data($data)->save();

第三种方法:

$模型->create();

$模型->save();

表单中必须包含一个以主键为名称的隐藏域

第四种方法:

$模型->where('id=5')->setField('name','ThinkPHP');

$模型->where('id=5')->setField(array('name','email'),array('TP','TP@163.com'));

//第四种方法,传数组时候,我实现不了。。。

第五种方法:

$模型->setInc('score','id=5',3); // 积分加3

$模型->setInc('score','id=5'); // 积分加1

$模型->setDec('score','id=5',5); // 积分减5

$模型->setDec('score','id=5'); // 积分减1

相关文章

巧用CircleSNS,大学校园也能轻松开启创业智能赚!

巧用CircleSNS,大学校园也能轻松开启创业智能赚!

人在江湖飘没有两把刷子怎么行众 所 周 知CircleSNSCircleSNS是一款基于UNIAPP开发的社交平台程序工具。在数字化浪潮的推动下,校园市场正迎来前所未有的创业机遇。作为一名有远见的创业...

微信小程序个人中心、我的界面

微信小程序个人中心、我的界面

微信小程序个人中心、我的界面、自定义顶部状态栏、页面监听跳转、简单界面布局微信小程序个人中心、我的界面,自定义顶部状态栏,实现滚动隐藏显示状态信息,界面简单,代码粘贴即用。更多微信小程序界面示例,请进...

微信小程序上拉加载、下拉刷新的使用方法

微信小程序上拉加载、下拉刷新的使用方法

一、定义数据data() {return {list: [],      //数据列表noMore: ...

如何用PHP模拟登录并抓取数据 ?

如何用PHP模拟登录并抓取数据 ?

使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:1)登录页面的地...

记录一次 if-else 代码优化的完整过程

记录一次 if-else 代码优化的完整过程

让我们来探讨一下如何将出租车叫车应用中的司机分配逻辑,从复杂的嵌套 if 语句中简化,使之更加清晰和易于维护。在之前的项目中,我参与了一款至今仍被广泛使用的出租车叫车应用的开发,虽然我不清楚他们现在使...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。