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

發(fā)布時間:2024-03-05
php實(shí)現(xiàn)更新功能的方法:首先制作升級包,增量更新;然后驗(yàn)證上傳文件,并驗(yàn)證當(dāng)前系統(tǒng)版本;接著備份原來的代碼,并當(dāng)升級失敗時進(jìn)行回滾;最后記錄升級日志,返回升級進(jìn)度即可。
推薦:《php視頻教程》
php 實(shí)現(xiàn)一個簡單的項(xiàng)目升級功能
思路
1.制作升級包,增量更新
2.升級包上傳驗(yàn)證上傳文件,驗(yàn)證當(dāng)前系統(tǒng)版本
3.升級之前要先備份原來的代碼,升級失敗要進(jìn)行回滾
4.記錄升級日志,返回升級進(jìn)度
5.升級包應(yīng)該是加密的(暫時沒實(shí)現(xiàn))
說明
1.升級包的目錄結(jié)構(gòu)必須如下
/ * 升級包規(guī)定的目錄結(jié)構(gòu) * xxx_版本號.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.sqldrop table test;drop table test2;4.代碼class upgradesys{ public $update_log = "/tmp/web/update_log.log"; //系統(tǒng)升級日志 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"];//忽略文件夾相對路徑 public $backup_dir = "/tmp/web/backup_dir";//備份目錄 public $upload_dir = "/tmp/web/upload_dir";//升級包目錄 public $sys_version_num = '1.0.0';//當(dāng)前系統(tǒng)的版本 這個在實(shí)際應(yīng)用中應(yīng)該是蟲數(shù)據(jù)庫獲取得到的,這里只是舉個例子 / 展示升級界面 */ public function index() { include("update.html"); } / * 處理升級包上傳 */ public function upload() { $params = $_post; if($_files) { $name = $_files['file']['tmp_name']; if(!$name || !is_uploaded_file($name)) { echo json_encode(["status"=>0,"msg"=>"請上傳升級包文件"]); die; } } //校驗(yàn)后綴 $astr = explode('.',$name); $ext = array_pop($astr); if($ext != 'zip') { echo json_encode(["status"=>0,"msg"=>"請上傳文件格式不對"]); die; } //校驗(yàn)升級密碼 // if(!isset($params['password']) || $params['password'] != $this->password) // { // echo json_encode(["status"=>0,"msg"=>"密碼錯誤"]); // die; // } //對比版本號 $astr = explode('_',$name); $version_num = str_replace(".zip", '',array_pop($astr)); if(!$version_num) { echo json_encode(["status"=>0,"msg"=>"獲取版本號失敗"]); die; } //對比 if(!$this->compare_version($version_num)) { echo json_encode(["status"=>0,"msg"=>"不能升級低版本的"]); 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("上傳升級包成功!"); $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í)行升級 $this->execute_update($package_name); } / * 升級操作 * @return [type] [description] */ private function execute_update($package_name) { //解壓 如何使用zip加密壓縮,這里解壓縮的時候注意要解密 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%&q
上一個:棗樹接穗選取與蠟封儲藏技術(shù)
下一個:熟茶沖泡技巧:泡數(shù)把控

異地就醫(yī)醫(yī)??ㄔ趺撮_通
iphone手機(jī)耗電太快了怎么解決(耗電太快怎么辦蘋果)
家用電表怎么接線?家用單相電表接線方法圖解
佳能相機(jī)eos70d使用說明(佳能70d使用教程圖解)
請問下備案材料提交必須掃描二維碼后現(xiàn)場拍攝上傳嗎
無錫本地寬帶辦理(無錫寬帶哪個好)
美國allen夾鉗產(chǎn)品供應(yīng)
修理電腦的叫什么職業(yè),修電腦是什么職業(yè)
轉(zhuǎn)子流量計在各種應(yīng)用場所的優(yōu)良性能
三棱箭養(yǎng)殖養(yǎng)護(hù)方法
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos