代码 PHP 压缩包脚本功能说明

2024-11-19 03:35:29 +0800 CST views 397

PHP 脚本功能说明

该 PHP 脚本用于将指定时间之后修改的文件压缩到一个名为 update.zip 的文件中。它会排除特定的目录和文件后缀,以确保只压缩需要的文件。

功能要点

  1. 日期参数: 可以通过命令行传递一个日期时间参数。如果没有提供参数,默认使用当天的开始时间(00:00:00)。
  2. 排除规则: 脚本会排除指定的目录(如 runtime)和文件后缀(如 .log.zip)。
  3. 文件压缩: 只会压缩指定时间后修改的文件,并将它们打包到 update.zip 中。

代码解析

<?php

// 检查是否传入了时间参数,默认使用当天零点
if ($argc < 2) {
    $specifiedTime = strtotime(date('Y-m-d 00:00:00'));
} else {
    $specifiedTime = strtotime($argv[1]);
}

// 检查时间格式是否有效
if ($specifiedTime === false) {
    echo "Invalid date format. Please use 'YYYY-MM-DD HH:MM:SS'.\n";
    exit(1);
}

// 定义排除的目录和文件后缀
$excludeDirs = ['runtime'];
$excludeExtensions = ['log','zip'];

// 生成排除目录的正则表达式
$excludeDirPattern = '#^(' . implode('|', array_map(function ($dir) {
    return preg_quote($dir, '#');
}, $excludeDirs)) . ')#i';

// 生成排除文件后缀的正则表达式
$excludeExtPattern = '#\.(' . implode('|', array_map(function ($ext) {
    return preg_quote($ext, '#');
}, $excludeExtensions)) . ')$#i';

$zip = new ZipArchive();
$zipFileName = 'update.zip';

// 打开或创建 zip 文件
if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) {
    exit("Cannot open <$zipFileName>\n");
}

// 遍历当前目录及其子目录的文件
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.'), RecursiveIteratorIterator::LEAVES_ONLY);

foreach ($files as $file) {
    if (!$file->isDir()) {
        $filePath = $file->getRealPath();
        $fileModTime = filemtime($filePath);
        
        // 获取相对路径
        $relativePath = substr($filePath, strlen(getcwd()) + 1);
        
        // 检查是否在排除的目录中
        if (preg_match($excludeDirPattern, $relativePath)) {
            continue;
        }

        // 检查是否有排除的文件后缀
        if (preg_match($excludeExtPattern, $filePath)) {
            continue;
        }

        // 检查文件是否在指定时间后被修改
        if ($fileModTime >= $specifiedTime) {
            $zip->addFile($filePath, $relativePath);
        }
    }
}

// 关闭 zip 文件
$zip->close();
echo "Files have been zipped to $zipFileName\n";

使用方法

  1. 将代码保存为 PHP 文件(例如 backup.php)。
  2. 在命令行中运行脚本,支持以下两种方式:
    • 默认使用当天的开始时间:
      php backup.php
      
    • 指定日期时间参数:
      php backup.php "2024-08-26 10:00:00"
      
  3. 脚本将生成一个名为 update.zip 的文件,其中包含在指定时间后修改且不在排除列表中的文件。

注意事项

  • 日期格式应为 'YYYY-MM-DD HH:MM:SS'
  • 可以根据需要修改 $excludeDirs$excludeExtensions 变量,以排除其他目录或文件类型。

复制全文 生成海报 编程 文件管理 PHP脚本

推荐文章

淘宝npm镜像使用方法
2024-11-18 23:50:48 +0800 CST
Flet 构建跨平台应用的 Python 框架
2025-03-21 08:40:53 +0800 CST
一个收银台的HTML
2025-01-17 16:15:32 +0800 CST
PHP 8.4 中的新数组函数
2024-11-19 08:33:52 +0800 CST
在Vue3中实现代码分割和懒加载
2024-11-17 06:18:00 +0800 CST
企业官网案例-芊诺网络科技官网
2024-11-18 11:30:20 +0800 CST
一个简单的打字机效果的实现
2024-11-19 04:47:27 +0800 CST
H5抖音商城小黄车购物系统
2024-11-19 08:04:29 +0800 CST
mysql int bigint 自增索引范围
2024-11-18 07:29:12 +0800 CST
Vue3中如何进行异步组件的加载?
2024-11-17 04:29:53 +0800 CST
一个简单的html卡片元素代码
2024-11-18 18:14:27 +0800 CST
使用 Nginx 获取客户端真实 IP
2024-11-18 14:51:58 +0800 CST
jQuery `$.extend()` 用法总结
2024-11-19 02:12:45 +0800 CST
介绍Vue3的静态提升是什么?
2024-11-18 10:25:10 +0800 CST
mendeley2 一个Python管理文献的库
2024-11-19 02:56:20 +0800 CST
curl错误代码表
2024-11-17 09:34:46 +0800 CST
在 Docker 中部署 Vue 开发环境
2024-11-18 15:04:41 +0800 CST
markdown语法
2024-11-18 18:38:43 +0800 CST
mysql时间对比
2024-11-18 14:35:19 +0800 CST
Python Invoke:强大的自动化任务库
2024-11-18 14:05:40 +0800 CST
Vue 中如何处理父子组件通信?
2024-11-17 04:35:13 +0800 CST
Rust 与 sqlx:数据库迁移实战指南
2024-11-19 02:38:49 +0800 CST
Nginx 状态监控与日志分析
2024-11-19 09:36:18 +0800 CST
Vue3中如何实现响应式数据?
2024-11-18 10:15:48 +0800 CST
程序员茄子在线接单