php文件上传MD5完整性验证方案实例【包含上传及下载方法】

需求背景
  • 由于设置的参数数据过多,以至于设备出厂后用户根据说明书设置数据比较繁琐。因此导入配置数据导入导出需求;
  • 首先配置一台设备的配置参数,等该设备所有参数配置完成后,将此设备的设备参数以数据包.tar的形式导出;
  • 再将数据包.tar导入进其他设备机器,一键自动设置相同参数。
技术重点与难点
  • 功能1:配置参数以.tar数据包的形式从设备导出
  • 功能2:配置参数以.tar数据包的形式从设备导入
  • 功能3:导入前数据包的完整性验证,防止我们所需导入的数据包被篡改
  • 功能4:数据包导入后内部逻辑功能一键设置导入参数
解决方案
  • 功能1:加载导出页面时,设计逻辑自动根据当前设备配置参数生成conf.tar配置参数数据包;导出页面以"<a>"标签的形式的href属性向后端逻辑传递参数;后端逻辑页面根据$_GET[]全局变量获取参数,同时以readfile()的形式导出文件。
    自动生成数据包程序如下。
<?php
@unlink("conf.tar");//删除历史配置文件
$filetxt = "conf/web.txt";
$filearm = "conf/arm.txt";
$cmd = "cp ".$filetxt." web.txt";
shell_exec($cmd);
$cmd = "cp ".$filearm." arm.txt";
shell_exec($cmd);
$cmd = "tar -cvf conf.tar web.txt arm.txt";
shell_exec($cmd);
$cmd = "rm web.txt";
shell_exec($cmd);
$cmd = "rm arm.txt";
shell_exec($cmd);
?>

前端向后端传递代码如下。

<a href="download.php?name=conf.tar&type=tar" class="btn btn-primary">配置导出</a>

后端导出文件逻辑代码如下。

$filename = $_GET['name'];
$filetype = $_GET['type'];
header("Content-Disposition:attachment;filename={$filename}");
header("Content-Type:{$filetype}");
header("Content_Length:".filesize($filename));
readfile($filename);
  • 功能2:前端页面以表单的形式向后端php文件提交表单数据,后端以$_FILES全局变量及move_uploaded_file()等方法实现数据包的上传
  • 功能3:数据包的完整性验证以php文件调用自带函数库md5_file()方法获取导入前及导入后的数据包md5值,判断两者是否一致,若一致,则数据包完整,没有篡改。
  • 功能4:数据包导入后一键参数设置根据php调用方法shell_exe()执行后台命令,将参数一键设置。

前端代码如下。

<form method="post" action="upload.php" enctype="multipart/form-data">
			<label for="file">文件名:</label>
			<input type="file" name="file" if="file" />
			<button type="submit" class="btn btn-primary">上传</button>			
</form>

后端代码如下。

$oldmd5 = md5_file("conf.tar");
if($_FILE["file"]["error"]){
	echo "错误".$_FILES["file"]["error"]."<br/>"
}
else{
	if($_FILES['file']['name'] == 'conf.tar'){
		if(move_uploaded_file($_FILES['file']['tmp_name'],"upload/".$_FILES['file']['name'])){
			$newmd5 = md5_file("upload/".$_FILES['file']['name']);
			if($oldmd5 = $newmd5){
				$cmd = "tar -cvf upload/conf.tar";
				shell_exec($cmd);
				$cmd = "mv web.txt /conf/web.txt";
				shell_exec($cmd);
				$cmd = "mv arm.txt /conf/arm.txt";
				shell_exec($cmd);
				echo '<script>alert("文件上传成功!")</script>';
				echo '<script>location.href="import.php"</script>';
			}
			else{
				echo '<script>alert("文件完整性损坏,请重新上传!")</script>';
				echo '<script>location.href="import.php"</script>';
			}
			
		}else{
			echo '<script>alert("文件上传失败,请重新上传!")</script>';
			echo '<script>location.href="import.php"</script>';
		}
	}else{
		echo '<script>alert("请上传符合格式的文件!")</script>';
		echo '<script>location.href="import.php"</script>';
	}
	
}

最后推荐一个公众号,一枚IT技术人成长路上关于生活和职场的思考,欢迎书友们前来交流和分享心得

在这里插入图片描述

福利~ 福利~ 福利~ 1块钱一次帮下CSDN资料

添加微信,备注下载资料~所需下载CSDN资料链接可通过微信发送。
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值