前言
代码包含PHP文件(图片)移动、PHP删除文件、PHP创建目录、PHP删除文件、PHP压缩文件夹、PHP删除非空文件夹、PHP利用HEADER请求头下载
代码
<?php
// +---------------------------------------------------------------------+
// | 清理内存备份功能:UX 04-25
// +---------------------------------------------------------------------+
namespace app\cms\controller;
use app\common\controller\Adminbase;
use think\Controller;
use think\facade\Session;
use think\Db;
class Delspace extends Adminbase
{
/**
* 渲染展示页面
*/
public function index()
{
return $this->fetch();
}
public function toSexMonth($dateMoth)
{
$today = input('param.today') ? input('param.today') : date("Y-m-d");
$arr = array();
$old_time = strtotime('-'.$dateMoth.' month',strtotime($today));
for($i = 0;$i <= $dateMoth; ++$i){
$t = strtotime("+$i month",$old_time);
$arr[]=date('Y-m-d',$t);
}
return $arr;
}
/**
* 备份功能
*/
public function backups()
{
# 获取过期时间戳信息
$backupDate = $_POST['date'];
$agoDate = $this->toSexMonth($backupDate)[0];
$agoDateTime = $agoDate." 00:00:00";
$agoDateStamp = strtotime($agoDateTime);
# 获取过期的信息
$dbMysql = Db::name('mreveal')->where('time' , '<' , $agoDateStamp)->where('hold',0)->select();
# 创建文件
$zeroFile = "./public/zerofile/";
$zipPath = "./public/zerofile.zip"; # zip压缩包保存路径
if(!is_dir($zeroFile)){
# 创建文件夹
mkdir($zeroFile,0755,true);
}else{
# 删除文件夹
$this->delDir($zeroFile);
# 删除ZIP压缩包
unlink($zipPath);
# 创建文件夹
mkdir($zeroFile,0755,true);
}
# 循环迁移文件
foreach($dbMysql as $uxkey => $uxval){
# 缩略图
$thumbUrl = ".".explode("||",$uxval['thumb'])[0];
$thumbUrlEnd = end(explode("/",$thumbUrl));
if(file_exists($thumbUrl)){
copy($thumbUrl,$zeroFile.$thumbUrlEnd);
unlink($thumbUrl);
}
# 图标
$iconUrl = ".".explode("||",$uxval['icon'])[0];
$iconUrlEnd = end(explode("/",$iconUrl));
if(file_exists($iconUrl)){
copy($iconUrl,$zeroFile.$iconUrlEnd);
unlink($iconUrl);
}
# 图片集
$imgsArr = explode(",",$uxval['imgs']);
foreach($imgsArr as $uximgs){
$imgsUrl = ".".explode("||",$uximgs)[0];
$imgsUrlEnd = end(explode("/",$imgsUrl));
if(file_exists($imgsUrl)){
copy($imgsUrl,$zeroFile.$imgsUrlEnd);
unlink($imgsUrl);
}
}
}
# 导出SQL语句
$uxSql = "";
foreach($dbMysql as $uxkey => $uxval){
$uxSql .= "INSERT INTO `jie_mreveal` VALUES ('1', '".$uxval['title']."', '".$uxval['thumb']."', '".$uxval['details']."', '".$uxval['flag']."', '".$uxval['keywords']."', '".$uxval['description']."', '".$uxval['listorder']."', '".$uxval['uid']."', '".$uxval['username']."', '".$uxval['sysadd']."', '".$uxval['hits']."', '".$uxval['inputtime']."', '".$uxval['updatetime']."', '".$uxval['customurl']."', '".$uxval['url']."', '".$uxval['status']."', '".$uxval['imgs']."', '".$uxval['group']."', '".$uxval['icon']."', '".$uxval['hold']."', '".$uxval['time']."'); \n";
}
# 创建sql文件
$zeroFile = "./public/zerofile/backupSql.sql";
if(!is_dir($zeroFile)){
touch($zeroFile,0755,true);
}
$fopenFile = fopen($zeroFile,"wb");
fwrite($fopenFile,$uxSql);
fclose($fopenFile);
# 压缩文件夹
try {
$dirPath = './public/zerofile/'; # 文件夹目录
$zip = new \ZipArchive();
if($zip->open($zipPath, \ZipArchive::CREATE|\ZipArchive::OVERWRITE)=== TRUE) {
# 调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
$this->addFileToZip($zip,$dirPath,$dirPath);
# 关闭处理的zip文件
$zip->close();
}
}
catch (\Exception $e){
echo "压缩失败!Error:".$e;
}
echo "压缩成功!";
# 获取时间
$thisDate = date("Ymd");
# 下载压缩包文件
$file_name = "zerofile_".$thisDate.".rar";
if (!file_exists($zipPath)) {
header('HTTP/1.1 404 NOT FOUND');
} else {
# 以只读和二进制模式打开文件
$file = fopen($zipPath, "rb");
# 告诉浏览器这是一个文件流格式的文件
Header("Content-type: application/octet-stream");
# 请求范围的度量单位
Header("Accept-Ranges: bytes");
# Content-Length是指定包含于请求或响应中数据的字节长度
Header("Accept-Length: " . filesize($zipPath));
# 用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
Header("Content-Disposition: attachment; filename=" . $file_name);
# 读取文件内容并直接输出到浏览器
echo fread($file, filesize($zipPath));
fclose($file);
echo "下载压缩包文件!";
}
# 删除SQL文件
Db::name('mreveal')->where('time' , '<' , $agoDateStamp)->where('hold',0)->delete();
}
/**
* 添加文件夹里的文件到zip
* @param zip ZipArchive对象
* @param path 源文件夹路径
* @param root 源文件夹根目录
* 补充说明:第三个参数建议和第二个参数一样,因为递归会修改第二个参数的值,因此必须传第三个参数
*/
function addFileToZip($zip,$path,$root){
$handler=opendir($path); //打开当前文件夹
while(($filename=readdir($handler))!==false){
if($filename != "." && $filename != ".."){//不操作名字为'.'和'..'的文件夹或文件
if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
addFileToZip($zip,$path."/".$filename,$root);
}else{
//将文件加入zip对象,第二个参数是zip里文件的路径
$pathFilename=$path . "/" . $filename;
$zip->addFile($pathFilename, str_replace($root.'/','',$pathFilename));
}
}
}
@closedir($path);
}
/**
* 刪除目录
*/
function delDir($directory){//自定义函数递归的函数整个目录
if(file_exists($directory)){//判断目录是否存在,如果不存在rmdir()函数会出错
if($dir_handle=@opendir($directory)){//打开目录返回目录资源,并判断是否成功
while($filename=readdir($dir_handle)){//遍历目录,读出目录中的文件或文件夹
if($filename!='.' && $filename!='..'){//一定要排除两个特殊的目录
$subFile=$directory."/".$filename;//将目录下的文件与当前目录相连
if(is_dir($subFile)){//如果是目录条件则成了
delDir($subFile);//递归调用自己删除子目录
}
if(is_file($subFile)){//如果是文件条件则成立
unlink($subFile);//直接删除这个文件
}
}
}
closedir($dir_handle);//关闭目录资源
rmdir($directory);//删除空目录
}
}
}
}
版权声明:本文为原创文章,版权归 星环博客 所有,转载请注明出处!
本文链接: https://xhto.cn/archives/213.html
友情提示:添加友联和友联失效404的请联系博主,并确保自己网站已经添加博主为友联!
黑色的背后是黎明... + 赞赏博主吧!已经穷的开不起站了~
我又来签到了啦~