先說下需求吧:做的桌面管理軟體(不聯網,隻有更新時聯網),然後有更新版本需求,故用到的方法為:把開發完的代碼及環境一塊打包,通過curl下載下傳至本地某盤,通過解壓指令覆寫本地代碼及環境;但是資料庫線上下,也就是說必須先備份原資料在執行還原。
一、解壓打包zip
/**
* 生成壓縮包
* @param $files 數組:['d:/test/1.jpg', 'd:/test/2.jpg'] 檔案路徑絕對路徑
* @param $filePath 輸出路徑 d:/test/new.zip
* @return bool
*/
function goZip($files, $filePath)
{
// 檢查參數
if (empty($url) || empty($path)) {
return false;
}
// 壓縮檔案
$zip = new ZipArchive();
$zip->open($filePath, ZipArchive::CREATE);
foreach ($files as $key => $file) {
// 檢查檔案是否存在
if (!file_exists($file)) {
return false;
}
// basename傳回路徑中的檔案名部分
$zip->addFile($file, basename($file));
}
$zip->close();
return true;
}
/**
* 解壓zip
* @param $filePath 壓縮包所在位址 【絕對檔案位址】d:/test/123.zip
* @param $path 解壓路徑 【絕對檔案目錄路徑】d:/test
* @return bool
*/
function unZip($filePath, $path)
{
// 檢查參數
if (empty($filePath) || empty($path)) {
return false;
}
$zip = new ZipArchive();
if ($zip->open($filePath) === true) {
// 解壓中文亂碼
$fileNum = $zip->numFiles;
for ($i = 0; $i < $fileNum; $i++) {
$statInfo = $zip->statIndex($i, ZipArchive::FL_ENC_RAW);
$zip->renameIndex($i, iconv('GBK', 'utf-8//IGNORE', $statInfo['name']));
}
$zip->close();
$zip->open($filePath);
$zip->extractTo($path);
$zip->close();
return true;
} else {
return false;
}
}
二、備份還原資料庫
/**
* 備份資料庫
*/
public static function sqlBack()
{
date_default_timezone_set("Asia/Shanghai");
$dbUser = 'root';
$dbPwd = 'This1020';
$dbName = 'db_jinan_bill';
$fileName = 'bak';
$name = 'e:/' . $fileName . '.sql'; // 資料庫檔案儲存位置
// 執行備份指令
$exec = 'e:/billV1.0/Extensions/MySQL5.7.26/bin/mysqldump -u' . $dbUser . ' -p' . $dbPwd . " " . $dbName . ' > ' . $name;
// 執行指令
exec($exec);
}
/**
* 還原資料庫
*/
public static function sqlReduction()
{
date_default_timezone_set("Asia/Shanghai");
$dbUser = 'root';
$dbPwd = 'This1020';
$dbName = 'db_jinan_bill';
$fileName = 'bak';
$name = 'e:/' . $fileName . '.sql'; // 資料庫檔案儲存位置
// 執行備份指令
$exec = 'e:/billV1.0/Extensions/MySQL5.7.26/bin/mysql -u' . $dbUser . ' -p' . $dbPwd . " " . $dbName . ' < ' . $name;
// 執行指令
exec($exec);
}
三、小細節
如果需要下載下傳線上的版本,那麼就要考慮到
curl 遠端下載下傳大檔案 我另一篇部落格也有教學:
https://blog.csdn.net/genziisme/article/details/114870675
資料庫備份還原也很早之前的一篇部落格有教學:
https://blog.csdn.net/genziisme/article/details/46517811
/**
* curl遠端下載下傳大檔案
* @param $url 遠端位址
* @param $path eg:d:/test/123.zip 絕對路徑
* @return boolean
*/
function downloadZip($url, $path)
{
// 檢查參數
if (empty($url) || empty($path)) {
return false;
}
set_time_limit(0);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// 忽略ssl證書
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// 寫入
$fp = fopen($path, 'w');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
curl_close($ch);
fclose($fp);
return true;
}