php在线升级程序的方法
发布于2019-10-13 09:35:11 分类:PHP 阅读( 22 )
思路:在程序目录中放一个php文件存入版本号,在远程服务器updata目录存入升级包。后台点升级,程序开始判断是否版本一致,如果不同,则下载远程服务器上的升级包,解压后覆盖本地服务器上文件后,修改版本号,升级结束。php脚本如下:
/** 更新方法:远程服务器上upload目录存放最新的升级包,根据web目录存放并压缩为upload.zip,升级过程中会将这个压缩包下载到down目录,然后解压,复制替换相应文件。最后修改版本号。 **/ include('../inc/conn.php'); session_start(); //检测是否登录,若没登录则转向登录界面 if(($_SESSION['userid'])!=1){ header("Location:login.php"); exit(); }?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="renderer" content="webkit"> <meta http-equiv="Cache-Control" content="no-siteapp"/> <title>在线升级</title> <meta name="keywords" content="在线升级"> <meta name="description" content="在线升级"> <link rel="shortcut icon" href="favicon.ico"> <link href="css/bootstrap.min.css" rel="stylesheet"> <script src="js/jquery.min.js"></script> <script src="js/bootstrap.min.js"></script> </head> <body class="gray-bg"> <a class="list-group-item active"><h3 class="list-group-item-heading text-center ">在线升级</h3> </a><br> <div class="text-center"> <h4>本机的程序版本为: <?php $filename = fopen('version.php', 'r'); while(!feof($filename)){ $bdbb = fgetss($filename, 1024);//本地版本号 echo $bdbb; } fclose($filename); ?> </h4> <?php //远程下载文件函数 function getFile($url, $save_dir = '', $filename = '', $type = 0) { if (trim($url) == '') { return false; } if (trim($save_dir) == '') { $save_dir = './'; } if (0 !== strrpos($save_dir, '/')) { $save_dir.= '/'; } //创建保存目录 if (!file_exists($save_dir) && !mkdir($save_dir, 0777, true)) { return false; } //获取远程文件所采用的方法 if ($type) { $ch = curl_init(); $timeout = 5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $content = curl_exec($ch); curl_close($ch); } else { ob_start(); readfile($url); $content = ob_get_contents(); ob_end_clean(); } $size = strlen($content); //文件大小 $fp2 = @fopen($save_dir . $filename, 'a'); fwrite($fp2, $content); fclose($fp2); unset($content, $url); return array( 'file_name' => $filename, 'save_path' => $save_dir . $filename ); } //复制文件夹内所有文件函数 function xCopy($source, $destination, $child){ //用法: // xCopy("feiy","feiy2",1):拷贝feiy下的文件到 feiy2,包括子目录 // xCopy("feiy","feiy2",0):拷贝feiy下的文件到 feiy2,不包括子目录 if(!is_dir($source)){ echo("Error:the $source is not a direction!"); return 0; } if(!is_dir($destination)){ mkdir($destination,0777); } $handle=dir($source); while($entry=$handle->read()){ if(($entry!=".")&&($entry!="..")){ if(is_dir($source."/".$entry)){ if($child) xCopy($source."/".$entry,$destination."/".$entry,$child); }else{ copy($source."/".$entry,$destination."/".$entry); } } } return 1; } //删除文件夹下所有文件函数,使用方法:调用函数,传入路径deldir($path); function deldir($path){ //如果是目录则继续 if(is_dir($path)){ //扫描一个文件夹内的所有文件夹和文件并返回数组 $p = scandir($path); foreach($p as $val){ //排除目录中的.和.. if($val !="." && $val !=".."){ //如果是目录则递归子目录,继续操作 if(is_dir($path.$val)){ //子目录中操作删除文件夹和文件 deldir($path.$val.'/'); //目录清空后删除空文件夹 @rmdir($path.$val.'/'); }else{ //如果是文件直接删除 unlink($path.$val); } } } } } //比较版本号 $fwqwz = 'https://cx.dzbfsj.com/admin-kzh/version.php'; $fwqbb = file_get_contents($fwqwz);//获取服务器版本号 echo '<h4>服务器最新版本为: '.$fwqbb.'</h4>'; if ($bdbb==$fwqbb){ echo '<br><h4><code>目前已是最新版本!</code></h4>'; }else{ echo '<br><h4><code>已有新版本,开始自动更新:</code></h4><br>'; //下载升级包 $url = "https://cx.dzbfsj.com/admin-kzh/upload/upload.zip"; $save_dir = "down"; $filename = "upload.zip"; deldir('./down');//删除解压后存入的文件夹内所有文件,防止重名无法解压。 $res = getFile($url, $save_dir, $filename, 1); //Array ( [file_name] => upload.zip [save_path] => down/upload.zip ) $filename = $res['file_name'];//文件名 upload.zip $zipfile = $res['save_path'];//路径 down/upload.zip echo '远程下载成功,开始解压升级包……<br>'; //解压文件 require_once('pclzip.lib.php'); $zip = new PclZip($zipfile);//压缩文件的路径 if ($zip->extract(PCLZIP_OPT_PATH, './down') == 0) { die("解压失败 : ".$archive->errorInfo(true)); }else{ echo '解压成功,开始升级系统!<br>'; unlink($zipfile);//删除升级包 xCopy("./down","../",1);//拷贝down下的文件到网站根目录,包括子目录 $myfile = fopen("version.php", "w") or die("down文件夹无法写入!");//修改版本号 fwrite($myfile, $fwqbb); fclose($myfile); echo '升级成功!<br>'; } }
最后更新于:2019-10-19 00:47:23
上一篇: 如何人工解密js,只要谷歌浏览器就行
下一篇: 常用文件的后缀,上传时的文件类型
- 最新评论(共0条)
最新评论