成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

php如何實(shí)現(xiàn)更新功能

php實(shí)現(xiàn)更新功能的方法:首先制作升級(jí)包,增量更新;然后驗(yàn)證上傳文件,并驗(yàn)證當(dāng)前系統(tǒng)版本;接著備份原來(lái)的代碼,并當(dāng)升級(jí)失敗時(shí)進(jìn)行回滾;最后記錄升級(jí)日志,返回升級(jí)進(jìn)度即可。

php如何實(shí)現(xiàn)更新功能

推薦:《PHP視頻教程》

php 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的項(xiàng)目升級(jí)功能

思路

1.制作升級(jí)包,增量更新

2.升級(jí)包上傳驗(yàn)證上傳文件,驗(yàn)證當(dāng)前系統(tǒng)版本

3.升級(jí)之前要先備份原來(lái)的代碼,升級(jí)失敗要進(jìn)行回滾

4.記錄升級(jí)日志,返回升級(jí)進(jìn)度

5.升級(jí)包應(yīng)該是加密的(暫時(shí)沒(méi)實(shí)現(xiàn))

說(shuō)明

1.升級(jí)包的目錄結(jié)構(gòu)必須如下

/**  *  升級(jí)包規(guī)定的目錄結(jié)構(gòu)  *  xxx_版本號(hào).zip(如:xxx_1.0.0.zip)  *   |  *   |————mysql  *   |    |  *   |    |___mysql_update.sql(更新腳本)  *   |    |___mysql_rockback.sql(回滾腳本)  *   |      *   |____php  *  */

2.mysql_update.sql

create table test(id init(11)); create table test2(id init(11)); mysql_rockback.sql drop table test; drop table test2; 4.代碼 class UpgradeSys{     public $update_log = "/tmp/web/update_log.log"; //系統(tǒng)升級(jí)日志     public $return_log = "/tmp/web/return_log.log"; //系統(tǒng)回滾日志     public $progress_log = "/tmp/web/progress_log.log"; //記錄進(jìn)度     public $root_dir = "/Users/feng/Documents/work/test"; //站點(diǎn)代碼的根目錄     public $aFile = ["log","runtime"];//忽略文件夾相對(duì)路徑     public $backup_dir = "/tmp/web/backup_dir";//備份目錄     public $upload_dir = "/tmp/web/upload_dir";//升級(jí)包目錄     public $sys_version_num = '1.0.0';//當(dāng)前系統(tǒng)的版本 這個(gè)在實(shí)際應(yīng)用中應(yīng)該是蟲數(shù)據(jù)庫(kù)獲取得到的,這里只是舉個(gè)例子     /** 展示升級(jí)界面 */     public function index()     {         include("update.html");     }     /**      * 處理升級(jí)包上傳      */     public function upload()     {         $params = $_POST;         if($_FILES)         {             $name  = $_FILES['file']['tmp_name'];             if(!$name || !is_uploaded_file($name))             {                 echo json_encode(["status"=>0,"msg"=>"請(qǐng)上傳升級(jí)包文件"]);                 die;             }         }         //校驗(yàn)后綴         $astr = explode('.',$name);         $ext = array_pop($astr);         if($ext != 'zip')         {             echo json_encode(["status"=>0,"msg"=>"請(qǐng)上傳文件格式不對(duì)"]);             die;         }         //校驗(yàn)升級(jí)密碼         // if(!isset($params['password']) || $params['password'] != $this->password)         // {         //     echo json_encode(["status"=>0,"msg"=>"密碼錯(cuò)誤"]);         //     die;         // }         //對(duì)比版本號(hào)         $astr = explode('_',$name);         $version_num = str_replace(".zip", '',array_pop($astr));         if(!$version_num)         {             echo json_encode(["status"=>0,"msg"=>"獲取版本號(hào)失敗"]);             die;         }         //對(duì)比         if(!$this->compare_version($version_num))         {             echo json_encode(["status"=>0,"msg"=>"不能升級(jí)低版本的"]);             die;         }         $package_name = $this->upload_dir.'/'.$version_num.'.zip';         if(!move_uploaded_file($name,$package_name))         {             echo json_encode(["status"=>0,"msg"=>"上傳文件失敗"]);             die;         }         //記錄下日志         $this->save_log("上傳升級(jí)包成功!");         $this->update_progress("20%");         //備份code         $result = $this->backup_code();         if(!$result)         {             $this->save_log("備份失敗!");             echo json_encode(["status"=>0,"msg"=>"備份失敗"]);             die;         }         $this->update_progress("30%");         //執(zhí)行升級(jí)         $this->execute_update($package_name);     }     /**      * 升級(jí)操作      * @return [type] [description]      */     private function execute_update($package_name)     {         //解壓 如何使用zip加密壓縮,這里解壓縮的時(shí)候注意要解密         exec(" cd $upload_dir && unzip $package_name ");         $package_name = str_replace(".zip","",$package_name);         if(!is_dir($package_name))         {             $this->save_log("解壓失敗");             echo json_encode(["status"=>0,"msg"=>"解壓失敗"]);             die;         }         $this->update_progress("50%");         //升級(jí)mysql         if(file_exists($this->upload_dir.'/'.$package_name."/mysql/mysql_update.sql"))         {             $result = $this->database_operation($this->upload_dir.'/'.$package_name."/mysql/mysql_update.sql");             if(!$result['status'])             {                 echo json_encode($result);die;             }         }         $this->update_progress("70%");         //升級(jí)PHP         if(is_dir($this->upload_dir.'/'.$package_name.'/php'))         {             exec("cd {$this->upload_dir}/{$package_name}/php && cp -rf ./* $this->root_dir ",$mdata,$status);             if($status != 0 )             {                 $this->save_log("php更新失敗");                 //數(shù)據(jù)庫(kù)回滾                 if(file_exists($this->upload_dir.'/'.$package_name."/mysql/mysql_rockback.sql"))                 {                     $this->save_log("數(shù)據(jù)庫(kù)回滾");                     $this->database_operation($this->upload_dir.'/'.$package_name."/mysql/mysql_rockback.sql");                                   }                 //php代碼回滾                 $cmd = "cp -rf " .$this->backup_dir."/".$this->sys_version_num.'/'.basename($this->root_dir)."/* ".$this->root_dir;                 exec($cmd,$mdata,$status);                 $this->save_log("php回滾");                 echo json_encode(["status"=>0,"msg"=>"php更新失敗"]);                 die;             }         }         //把解壓的升級(jí)包清除         exec("rm -rf $upload_dir/$package_name ");                  $this->update_progress("100%");         //更新系統(tǒng)的版本號(hào)了        //更新php的版本號(hào)了(應(yīng)該跟svn/git的版本號(hào)一致)        //更新數(shù)據(jù)庫(kù)的版本號(hào)了(應(yīng)該跟svn/git的版本號(hào)一致)         echo json_encode(["status"=>1,"msg"=>"升級(jí)成功"]);         die;     }     /**      * 比較代碼版本      * @return [type] [description]      */     private function compare_version($version_num='1.0.0')     {                  return version_compare($version_num,$this->sys_version_num,'>');     }     /**      * 備份代碼      */     private function backup_code()     {         //rsync 要確定系統(tǒng)是否已經(jīng)安裝         $cmd = "cd $root_dir && cd ..  && rsync -av ";         foreach ($this->aFile as $key => $value) {             $cmd ."--exclude ". basename($this->root_dir) ."/".$value ." ";         }         $cmd .= basename($this->root_dir)." ".$this->backup_dir."/".$this->sys_version_num;         exec($cmd,$mdata,$status);         if($status != 0)         {             return false;         }         //這里還可以對(duì)備份的文件進(jìn)行壓縮         return true;     }     /**      * 數(shù)據(jù)庫(kù)操作      */     public function database_operation($file)     {         $mysqli = new mysqli("localhost","root","root","test");         if($mysqli->connect_errno)         {             return ["status"=>0,"msg"=>"Connect failed:".$mysqli->connect_error];         }         $sql = file_get_contents($file);         $a = $mysqli->multi_query($sql);         return ["status"=>1,"msg"=>"數(shù)據(jù)庫(kù)操作OK"];     }     /**      * 返回系統(tǒng)升級(jí)的進(jìn)度      */     public function update_progress($progress)     {         exec(" echo '".$progress."' > $this->progress_log ");     }     /**      * 記錄日志      */     public function save_log($msg,$action="update")     {         $msg .= date("Y-m-d H:i:s").":".$msg."n";         if($action == "update")         {             exec(" echo '".$msg."' >>  $this->update_log ");         }else         {             exec(" echo '".$msg."' >>  $this->return_log ");         }     } }

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
乱中年女人伦视频国产| Z〇ZOZ〇女人另类ZOZ〇| 久久精品熟女亚洲AV麻豆网站| 性生交片免费无码看人| 国产成人亚洲精品无码MP4| 色偷偷噜噜噜亚洲男人| 成 人 黄 色 网 站 在线观| 人人妻人人爽人人做夜欢视频九色| 99视频69E精品视频| 欧美成人精品三级网站| 92国产精品午夜福利免费| 免费无码久久成人网站| 18禁黄网站禁片免费观看女女 | 欧美顶级METART裸体全部自慰| 中文字幕AV无码专区第一页| 林静公交车被做到高C| 在线观看亚洲av| 蜜臀亚洲AV无码精品国产午夜.| 中文无码一区二区视频在线播放量 | 荫蒂每天被三个男人添视频| 老熟女DHXⅩXXX88老妇女| 在C点用力把桌腿A抬离地面时游| 巨大黑人极品VIDEOS精品| 在线成人A毛片免费播放| 免费看行情的网站| 99久久综合狠狠综合久久AⅤ| 欧美激情精品久久久久久黑人| AV亚欧洲日产国码无码| 人妻少妇精品视频无码综合 | 久久精品女人天堂AV麻| 野花香视频免费观看| 麻豆精品一区综合AV在线| 777米奇第四在线观看| 欧美性猛交XXX嘿人猛交| 班长哭了能不能再抠游戏里面的钱| 日本熟妇色丰满少妇wwwww色| 丰满少妇BBWBBW| 婷婷5月女内射AV| 国产又黄又大又粗的视频 | 欧美无人区码卡二三卡四卡 | 亚洲成色WWW成人网站| 久久99精品国产麻豆蜜芽| 伊人久久大香线蕉综合AV| 女邻居的大乳中文字幕理论| 啊灬啊灬啊灬快灬深高潮了亚洲乱色视频在线观看 | 成人网站在线观看丰满少妇电影| 特级欧美ZOOXX| 国产亚洲AV电影院之毛片| 亚洲日韩激情无码一区| 免费看含羞草AV片成人网站| 宝贝腿抬高点让我爽一点麻豆| 少妇人妻精品一区二区| 国产亚洲欧美日韩剧的剧情介绍| 亚洲欧美日韩成人综合网 | 国产成人亚洲精品无码高潮| 亚洲AV午夜成人片精品| 久久丫线这里只精品| CAOPORM超免费公开视频| 色综合天天视频在线观看| 国产怡春院无码一区二区| 亚洲亚洲人成综合网络| 欧美黑人又大又粗XXXX| 公天天吃我奶躁我的B| 亚洲AV无码成人精品区浪潮AV| 久久人人爽人人爽人人片AV东京| A级毛片毛片免费观的看久| 少妇荡乳情欲办公室456视频| 国内精品久久人妻互换| 再深点灬舒服灬太大了添A| 人人爽人人片人人片AV| 国产色视频一区二区三区| 一本大道东京热无码视频| 人妻的渴望波多野结衣| 国产精品一区二区久久| 一本大道色卡1卡2卡3| 日本精产国品一二三产品区别| 国产区在线观看成人精品| 荫蒂添的好舒服小说短篇| 日本免费一区二区三区最新VR | 99视频精品全部在线观看| 思思RE热免费精品视频66| 精品国精品无码自拍自在线| A级毛片高清免费视频在线播放| 推高她的裙子挺身而入| 久久久久精品无码AV| 啊轻点灬大JI巴太粗太长在线了| 小寡妇好紧进去了好大看视频| 久久亚洲国产成人精品性色 | 呦系列视频一区二区三区| 日本无套内射ⅩXXXX人妻在线| 国精产品一品二品国精HTC| 18禁全彩肉肉无遮挡| 特级做A爰片毛片免费看无码| 久久成人国产精品一区二区| 办公室屈辱的人妻加班| 亚洲а∨天堂男人色无码蜜臀69| 女人为啥摸几下就让进了| 国产精品成熟老女人视频| 又黑又肥的60岁岳| 少妇AAA级久久久无码精品片| 久久AⅤ免费观看| 草莓丝瓜芭乐鸭脖奶茶搭配食物| 亚洲成AV人片在| 全彩十八禁漫画无遮挡| 黑人粗大与亚裔乱P视频| JAPANESE熟女熟妇多毛毛| 亚洲 精品 综合 精品 自拍| 女人无遮挡无内衣内裤网站| 国产无遮挡又黄又大又爽 | 亚洲A∨精品一区二区三区| 男朋友想吻我腿中间那个部位 | 亚洲一区二区三区无码久久| 人妻中文乱码在线网站| 精品毛片高清一区二区三区| 部长的夫人的味道中字| 亚洲天堂无码高清高潮| 四川老妇女乱HD| 蜜芽久久人人超碰爱香蕉| 国产精品一区二区高清在线| AV电影在线观看| 亚洲国产成人精品青青草原| 日本无遮挡吸乳视频| 久久人人爽爽人人爽人人片AV | 2020无码天天喷水天天爽| 亚洲AV无码成H人在线观看| 全部孕妇毛片丰满孕妇孕交| 九色丨PORNY丨自拍 ICU| 公交车上拨开丁字裤进入| 中文字幕人妻无码专区APP| 亚洲AⅤ中文无码字幕色下载软件 亚洲AⅤ中文无码字幕色本草 | BDB14黑人巨大视频| 亚洲AV永久无码天堂网毛片| 日本妇人成熟免费中文字幕| 久久精品熟女亚洲AV噜噜| 国产精品久久久久秋霞鲁丝| CHINESE中年熟妇FREE| 亚洲人成人一区二区三区| 天堂中文资源在线最新版下载| 女人张开腿扒开内裤让男生桶| 精品国产乱码久久久久久蜜桃| 顶级私人家庭影院| 最新国产在线拍揄自揄视频| 亚洲高清国产拍精品熟女| 四虎永久在线精品免费网址| 欧美AAAAAA级午夜福利视频| 精选AV种子无码专区| 国产精品原创AV片国产日韩| WWXX在线观看免费| 一区蜜桃中文不卡在线| 亚洲AV乱码一区二区三区按摩| 三个媳妇一锅烩大团圆| 男阳茎进女阳道啪啪| 精品一区二区三区在线成人| 国产精品门事件AV| 苍井空无码免费换线| 性欧美牲交XXXXX视频| 亚洲男同帅GAY片在线观看| 玩弄粉嫩少妇高潮出白浆AⅤ| 人妻免费久久久久久久了| 免费A级毛片在线看| 精品人妻中文AV一区二区三区| 国产精品无码一区二区三区不卡| 扒开两腿中间缝流白浆在线看| 中国OLDWOMAN老熟妇| 亚洲国产婷婷六月丁香| 无人码在线观看高清完整免费| 三级无码在钱AV无码在钱| 欧式春画图片大全欣赏简单| 麻豆果冻传媒精品国产AV| 久精品夜色国产亚洲AV| 国产又色又爽又刺激在线观看 | 在线观看一区二区三区AV| 亚洲国产成人久久精品99| 无码欧亚熟妇人妻AV在线外遇| 日韩揉捏奶头高潮不断视频| 欧美又粗又大XXXXBBBB疯狂| 蜜臀少妇人妻在线| 巨大垂乳日本熟妇挤奶| 久久精品国产一区二区无码 | 锕锕锕锕锕锕~好湿WWW| 综合无码一区二区三区四区五区| 亚洲中文无码永久在线电影| 亚洲精品国产一二三无码AV| 亚洲AV日韩AV永久无码水密桃| 无码熟妇人妻AV在线网站| 特级毛片内射WWW无码| 色又黄又爽18禁免费网站现观看| 人妻无码AⅤ中文系列久久免费| 欧美黑人性暴力猛交喷水黑人巨大 | 三个人换着躁B一PL| 日韩精品一区二区三区影院| 人人妻人人澡人人爽人人免费 | 亚洲AV无码成人精品区狼人影院| 无码熟妇人妻AV在线影片最多| 丝袜美腿一区二区三区| 熟妇人妻VA精品中文字幕| 少妇的BBW性大片| 少妇又色又紧又爽又刺激视频| 色噜噜狠狠色综合AV妖精| 日韩人妻无码专区精品|