主要功能:
在升级系统之前,
首先将本次升级所需要覆盖的文件,按照原来的目录结构copy出来,备份在指定的地方。
万一升级有问题,可以使用这个预备份的进行还原。
注意:这个工具只能处理文件覆盖的问题,暂时不能处理 新增或者删除文件的情况。
建议使用 linux + php5.2以及以上版本。
如果是windows 请将常量 CNT_SEPARATE_CHAR_FOR_PATH 更改为 \。 应该可以的,不过笔者就没试过而已。
<?php
/**
* 名称 : 升级文件预备份工具
* 主要功能:
* 在升级系统之前,
* 首先将本次升级所需要覆盖的文件,按照原来的目录结构copy出来,备份在指定的地方。
* 防止,万一升级有问题,可以使用这个预备份的进行还原。
*
* 注意:这个工具只能处理文件覆盖的问题,暂时不能处理 新增或者删除文件的情况。
*
* Step:
* 1. check arguments
* 2. scan upgRoot,
* 1) mkdir in desc
* 2) copy the file to Desc
*
* If desc not exist, create it.
* Suggest : Desc is empty, or is not exists.
*/
define("CNT_SEPARATE_CHAR_FOR_PATH", "/");
define("CNT_SHOW_DETAIL", true);
define("CNT_SHOW_NOT_FIND", true); # if (CNT_SHOW_NOT_FIND and CNT_SHOW_DETAIL) show the file or dir which do not find
# 1. check arguments
if (count($argv) != 4 ){
showHelp("miss arguments .");
}
$appRoot = $argv[1];
$upgRoot = $argv[2];
$desRoot = $argv[3];
if (!is_dir($appRoot)){
showHelp(" [{$appRoot}] is not exist, or is not a directory.");
}
if (!is_dir($upgRoot)){
showHelp(" [{$upgRoot}] is not exist, or is not a directory.");
}
# 2. scan upgRoot
echo "\n";
if (CNT_SHOW_DETAIL) echo "{$desRoot}\n";
$prefixForShow = "";
$re = copyUpgFileFromAppToDesc($appRoot, $upgRoot, $desRoot, $prefixForShow);
if ($re){
echo "\nCongratulation! The {$desRoot} has been created successfully.\n\n";
}else{
echo "\nMay be something is wrong, check it and try again. \n";
}
# finish
#------------- functions -----------------------
function copyUpgFileFromAppToDesc($appPath, $upgPath, $desPath, $prefixForShow){
$re = true;
if (!file_exists($desPath)) mkdir_p($desPath); // 创建相应目录
$fileList = scandir($upgPath);
$count = count($fileList) - 2; # 因为有 . ..
$index = 0;
foreach ($fileList as $fileName){
if ($fileName == "." || $fileName == "..") continue; // next cycle
$index++;
$isLast = ($index == $count);
#$nSpaceChar = getSpaceChar($prefixForShow * 4);
$appFullFile = $appPath . CNT_SEPARATE_CHAR_FOR_PATH . $fileName;
$upgFullFile = $upgPath . CNT_SEPARATE_CHAR_FOR_PATH . $fileName;
$desFullFile = $desPath . CNT_SEPARATE_CHAR_FOR_PATH . $fileName;
if (!file_exists($appFullFile)){
if (CNT_SHOW_DETAIL && CNT_SHOW_NOT_FIND){
if (!$isLast){
echo $prefixForShow . "|-- " . $fileName . " (not find) \n";
}else{
echo $prefixForShow . "`-- " . $fileName . " (not find) \n";
}
}
continue; // app中不存在相应文件,就不必再copy了
}
if (CNT_SHOW_DETAIL){
if (!$isLast){
echo $prefixForShow . "|-- " . $fileName . "\n";
}else{
echo $prefixForShow . "`-- " . $fileName . "\n";
}
}
if (is_dir($upgFullFile)){
$nextPrefix = $prefixForShow . "| ";
if ($isLast) $nextPrefix = $prefixForShow . " ";
$re = copyUpgFileFromAppToDesc($appFullFile,$upgFullFile,$desFullFile, $nextPrefix);
if (!$re){
echo "Error: copy direcotry [{$appFullFile}] to [{$desFullFile}]";
break;
}
}else{
$re = copy($appFullFile, $desFullFile);
if (!$re){
echo "Error: copy file [{$appFullFile}] to [{$desFullFile}]";
break;
}
}
}
return $re;
}
// 强行创建相应的目录
function mkdir_p($dirname){
if (!file_exists($dirname)){
mkdir_p(dirname($dirname));
mkdir($dirname);
}
}
function getSpaceChar($n){
$re = "";
for($i =0; $i<$n; $i++) $re.=" ";
return $re;
}
function showHelp($errorMessage = ""){ // with exit.
if (!$errorMessage == ""){
echo $errorMessage . "\n";
}
echo "Usage:
php bak_file_before_upgrade.php RootPath_Application RootPath_UpgradePackage RootPath_Desc
If one file is both in RootPath_Application and RootPath_UpgradePackage,
we will copy the file in RootPath_Application to RootPath_Desc.
If it in subdirecotry, then we will create the same name directory in RootPath_Desc.
e.g.
php bak_file_before_upgrade.php /export/yourApplication /tmp/upgrade/yourUpgradePackage /tmp/bakbeforeupgrade/bakupDirectory
\n";
exit;
}
?>
分享到:
相关推荐
- **数据显示**:对于不同软件版本,具体含义为:[当前已升级文件/ROM升级总文件][PASS总次数/运行总次数]。 - **信息显示**:黑色字体为运行信息,红色字体为FAIL信息,绿色字体表示升级完成。 以上步骤详细介绍了...
Oracle EBS R12升级流程图不仅是一份技术文档,更是企业IT团队进行系统升级的行动指南。通过遵循这一流程,可以最大限度地降低升级风险,确保升级过程顺利进行,为企业带来持续的技术创新和业务增长动力。对于参与...
1. **PandoraBox-ralink-mt7620-xiaomi-mini-squashfs-sysupgrade-r1024-20150608.bin**:这是一个固件升级文件,基于SquashFS文件系统,适用于斐讯K2路由器。"ralink-mt7620"指的是路由器所采用的联发科(Mediatek...
覆盖了升级之前的风险评估以及必要性的数据收集、选用工具如dbupgrade和Catctl.pl,具体介绍静默命令应用如Dry-Run和真正升级过程中所需执行的关键脚本,此外也提及了升级后验证操作以及涉及的相关系统参数修改,...
1. 下载:用户需要从官方网站或其他可靠渠道下载对应型号的固件升级文件,确保文件来源的安全性,防止病毒或恶意软件。 2. 预备:在升级前,用户需要备份个人数据,因为升级过程中可能会清除原有数据。同时,确保MP4...
4. 运行工具:打开刷机工具,选择相应的操作选项(如升级或恢复),然后导入对应的系统固件文件。固件文件通常为ZIP格式,包含设备所需的操作系统镜像。 5. 开始刷机:点击开始或刷机按钮,工具会自动开始执行刷机...
首先,确保有足够的磁盘空间,因为Windows Server 2008的安装文件较大,且安装过程中会复制所有文件到硬盘,以便后续添加角色和服务。此外,备份是升级前必不可少的步骤,以防意外发生。 升级步骤包括: 1. 提升域...
- 版本管理:打包工具有助于版本管理和更新推送,使用户可以方便地升级到新版本。 2. 常见的打包工具: - Inno Setup:这是一个免费的Windows安装制作工具,支持创建自解压文件和多语言安装程序。 - NSIS ...
标题中的“行业文档-设计装置-基于先进教育理念的学前预备教育系统”表明...通过阅读这份PDF文件,读者将能够深入理解这个学前预备教育系统的全面设计,以及如何通过先进教育理念和技术,来提升学前教育的效率和质量。
1. 下载:首先从Brother官方网站或者其他可靠来源下载对应的固件更新工具,确保文件完整无误。 2. 预备:关闭打印机,避免在更新过程中发生干扰。 3. 安装:运行“Brother_MFC8680DN_FWUpdate_411.exe”安装程序,...
2. 预备检查:在升级前,应备份现有固件,检查服务器当前状态,确保所有关键业务已暂停或迁移,以防止升级过程中出现意外中断。 3. 升级操作:根据华为提供的升级指南,通过iBMC Web界面或者命令行工具进行固件升级...
4. 升级:使用专门的管理工具或命令行界面执行固件升级,按照指示导入下载的"AP3010DN-AGN-FAT"文件。 5. 验证:升级完成后,验证AP是否成功切换到FAT模式,并检查设备状态和无线网络性能。 6. 配置:在FAT模式下,...
根据提供的文件信息,我们可以深入探讨ADuC702X在线升级方案的设计与程序设计的关键知识点。 ### ADuC702X在线升级方案设计与程序设计简介 #### 第一章 相关预备知识 ##### 一、ADuC702x物理存储结构地址图 ADuC...
总结来说,西门子的TIA Portal Readiness Check Tool是一个非常实用的预备工具,它能够在自动化项目规划和实施前有效地帮助工程师检查硬件与TIA Portal软件的兼容性,从而避免项目执行中因硬件兼容问题导致的延误和...
在上传版本文件至FTP服务器时,还需要确认FTP Server的用户和密码设置正确,并且将升级文件放置在指定的路径。 设备的运行状态检查也是备份前的重要步骤。用户必须仔细检查设备的运行状况,确认系统无异常告警存在...
2. 预备工具:安装J-LINK的官方驱动和配套软件,比如J-Link Software and Documentation Pack,它包含了所有必要的工具。 3. 连接设备:将J-LINK通过USB连接到电脑,确保电脑能识别并正确安装驱动。 4. 进行固件...
对于工具的使用,熟悉命令行操作、配置文件的解读、工具的安装和升级、与其他工具的集成等技能同样必不可少。 在学习源码时,我们可能会关注以下几点: 1. **编程语言特性**:根据源码使用的编程语言,学习其语法、...