Thinkphp获取项目最近更改变动的所有文件

这篇具有很好参考价值的文章主要介绍了Thinkphp获取项目最近更改变动的所有文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

导读:

企业级的网站项目都是要不断优化迭代更新的,做为一名后端程序员,在编写更新模块时,如何能快速获取最近修改的文件,然后打包压缩成更新补丁呢?我们先来看一下最终效果图:

Thinkphp获取项目最近更改变动的所有文件

 步骤:

一、在extend扩展目录创建一个名为ChangesFile.php的文件,代码如下:

<?php
/**
* 获取网站最近更新变动的文件列表
* author:元歌
* date:2023年4月25日
*/
class ChangesFile{
    
    private $fileArray = array();
    // 过滤文件
    private $extFilter = [
            '.log',
            '.txt',
            '.env',
            '.git',
            '.idea',
            '.vscode',
    ];
     // 过滤的目录或文件
     private $packageFilter = [
        'vendor',
        'runtime',
        'cache',
        'uploads',
        'thinkphp5.0.24'
    ];
    /**
     * 查找最近1天内修改的文件
     */
    public function getFileList($root){
        // 指定开始的时间
        $checkTime = strtotime ("-1 day");
    
        $this->find($root, function (SplFileInfo $item, bool $isDir) use ($root, $checkTime) {
            //文件路径
            $filePath = $item->getPathname();
            //2.过滤不在日期范围内的
		    if((int)$item->getMTime() < $checkTime){
			    return;
		    }
            if ($checkTime > max($item->getMTime(), $item->getCTime())) {
                return;
            }
            //3.排除目录
            if(!empty($filePath) && !$isDir){
                 //文件名称,或者使用basename($item)
                 $filename = $item->getFilename();
                //最近更新日期
                $recentChangesTime = date("Y-m-d H:i:s",$item->getMTime());
                array_push($this->fileArray,[
                    "name" => $filename,
                    "time" => $recentChangesTime,
                    "path" => $filePath
                ]);
            }
            /*
            $savePath = str_replace($root, $root . DIRECTORY_SEPARATOR . '__package', $filePath);
            $saveDir = $isDir ? $savePath : dirname($savePath);
        
            //创建目录
            if (!is_dir($saveDir)) {
                $result = mkdir($saveDir, 0777, true);
                echo 'mkdir: ', $saveDir, $result ? ' successfully' : ' failure', PHP_EOL;
            }
            //复制文件
            if (!$isDir) {
                $result = copy($filePath, $savePath);
                echo 'copy: ', $filePath, $result ? ' successfully' : ' failure', PHP_EOL;
            }
            */
        });
        return $this->fileArray;
    }
    
    
    function find(string $root, Closure $filter): void
    {
        $items = new FilesystemIterator($root);
        /** @var SplFileInfo $item */
        foreach ($items as $item) {
            //过滤目录
            $dirtemp=dirname($item);
            $dirname = substr($dirtemp, strrpos($dirtemp, '/') + 1);
            if (!empty($dirname) && in_array($dirname, $this->packageFilter)) {
                continue;
            }
            if ($item->isDir() && !$item->isLink()) {
                $filter($item, true);
                $this->find($item->getPathname(), $filter);
                continue;
            }
            $filter($item, false);
        }
    }
}

二、在控制器里调用刚才添加的扩展插件ChangesFile.php,方法如下:文章来源地址https://www.toymoban.com/news/detail-425776.html

public function update(){
	//1.获取最近改动的文件(ROOT_PATH 为Thinkphp5.0的网站根目录)
    $changesFile = new \ChangesFile();
    $list = $changesFile->getFileList(ROOT_PATH);
    //2.按照日期重新排序
    $sort=array_column($list,"time");
    array_multisort($sort,SORT_DESC,$list);
    echo "<pre>";
    var_dump($list);

	return view();
}

到了这里,关于Thinkphp获取项目最近更改变动的所有文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python获取文件夹下所有文件

    python获取文件夹下所有文件,大家肯定都会想到os.listdir了,但是这种方法只能够获取到当前文件夹中的所有文件/文件夹,如果我想获得文件夹-文件夹-文件呢? 我的需求是只要文件夹中所有非文件夹,换句话来说对于我们的需求只有文件夹和非文件夹两种情况,那么直接联

    2024年02月12日
    浏览(45)
  • java获取文件夹下所有的文件

    对于一个 嵌套 的目录,获取目录下所有的文件,可以使用以下两种方式: 1. 通过递归获取 File类提供了如下两个方法: file.list():返回目录下文件和子目录名;(不会递归) file.listFiles():返回目录下文件和子目录File对象;(不会递归) 例子中List只是存放了文件夹下所有的

    2024年02月07日
    浏览(51)
  • MFC的文件操作——获取指定文件夹下面所有文件路径和删除指定文件夹下面所有文件

    目录 1.获取指定文件夹下面所有文件路径  2.删除指定文件夹下面所有文件 3.MFC的CString 字符串操作 4.MFC的 Int类型 与 Htuple类型数据之间转换  5.上述提及的函数应用 6.MFC与Halcon联合编程,获取halcon异常 7.MFC获取指定路径下的文件夹路径           ①、文件夹路径获取方式 ②

    2024年02月16日
    浏览(99)
  • java获取文件夹下所有文件名

      在进行 Java编程的过程中,我们会经常使用到文件夹下的所有文件名。有时候可能不太熟悉 Java编程的小伙伴们会发现,在代码中没有获取到所有的文件名,那么这个时候我们应该怎么去获取到这些文件呢?在进行 Java编程的过程中,我们会经常使用到 Java里面的 JDBC数据库连

    2024年02月10日
    浏览(57)
  • springmvc 获取项目中的所有请求路径

    springboot/springmvc 获取项目中的所有请求路径 1. 编写业务代码 2. 异常信息 No qualifying bean of type ‘org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping’ available: expected single matching bean but found 3: swagger2ControllerMapping,requestMappingHandlerMapping,controllerEndpointHandlerMapping 原因就

    2024年02月09日
    浏览(35)
  • nacos 监听配置文件变动(自动刷新),监听服务变动(权重、元数据等),手动推送服务

    对于启动项目时可以检测的配置文件,修改配置文件时也可进入监听,对于服务监听时,项目启动时注册进nacos可以监听,修改服务时关闭服务时都可以监听,也可以手动推送服务到nacos上。 nacos上的配置文件名称为:服务名称-dev.yaml bootstrap.yml

    2024年02月15日
    浏览(32)
  • java获取某个文件夹下的所有文件

    目录 一.前言 二.获取文件夹下的文件路径 在我们平时编写开发文档的时候, 我们会获取到项目文件中的所有子文件来展示我们的源代码所储存的位置, 获取我们项目下的所有文件路径,  这时我们会如何用Java代码来获取我们项目下的所有文件呢, 今天我们来比编写一下代码 在

    2024年02月12日
    浏览(56)
  • python获取当前文件下的所有文件名

    运行效果图

    2024年02月12日
    浏览(36)
  • 获取harbor某个项目下所有镜像及 ID

    需求:把harbor某个仓库组下的所有镜像名字及镜像ID收集出来; 镜像仓库为使用Docker-compose快速部署。 注意:所收集到的镜像有多个tag的话,脚本是根据tag的创建时间,取最新的tag。 于是编写如下脚本: 修改完成后,保存退出,并进行执行,执行完成后,会在当前目录生成

    2024年02月16日
    浏览(26)
  • CMake获取目录下所有源文件

    1、aux_source_directory指令         aux_source_directory( dir variable ) 比如:         aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} ALL_SOURCE) , 这样将当前目录所有的源文件(.cpp 和.c文件)都放到了ALL_SOURCE变量中,但是头文件并没有被包括进去,若在头文件有函数的实现部分,采用这

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包