文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-07 16:26

关注

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

线上项目,实测,

    public function update() {        // 这里省略了版本判断逻辑,根据自己需要去写        // 更新包信息        $file_url = 'http://asd.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]);        }    }

 

        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;    }

来源地址:https://blog.csdn.net/weixin_45809825/article/details/126324633

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯