spatie/file-system-watcher

使用PHP监控文件系统中的更改

1.2.0 2023-12-18 14:26 UTC

This package is auto-updated.

Last update: 2024-09-04 10:31:48 UTC


README

Latest Version on Packagist Tests GitHub Code Style Action Status Total Downloads

此包允许您对文件系统中的所有更改做出反应。

以下是当新文件被添加时运行代码的示例。

use Spatie\Watcher\Watch;

Watch::path($directory)
    ->onFileCreated(function (string $newFilePath) {
        // do something...
    })
    ->start();

支持我们

我们投入了大量资源来创建最优秀的开源包。您可以通过购买我们的付费产品之一来支持我们。

我们非常感谢您从家乡给我们寄明信片,注明您正在使用我们的哪个包。您可以在我们的联系页面找到我们的地址。我们将在我们的虚拟明信片墙上发布所有收到的明信片。

安装

您可以通过composer安装此包

composer require spatie/file-system-watcher

在您的项目中,您应该已经安装了JavaScript包chokidar。您可以通过npm安装它

npm install chokidar

或Yarn

yarn add chokidar

用法

以下是您如何开始监控目录并通知任何更改的示例。

use Spatie\Watcher\Watch;

Watch::path($directory)
    ->onAnyChange(function (string $type, string $path) {
        if ($type === Watch::EVENT_TYPE_FILE_CREATED) {
            echo "file {$path} was created";
        }
    })
    ->start();

您可以将任意多个目录传递给path

要开始监控,请调用start方法。请注意,start方法永远不会结束。在那之后的任何代码都不会执行。

为确保监视器在生产中持续监控,请使用类似Supervisord的东西监控启动它的脚本或命令。下面是Supervisord示例配置

检测更改类型

您传递给onAnyChange闭包的$type参数可以包含以下值之一

  • Watcher::EVENT_TYPE_FILE_CREATED:创建了一个文件
  • Watcher::EVENT_TYPE_FILE_UPDATED:更新了一个文件
  • Watcher::EVENT_TYPE_FILE_DELETED:删除了一个文件
  • Watcher::EVENT_TYPE_DIRECTORY_CREATED:创建了一个目录
  • Watcher::EVENT_TYPE_DIRECTORY_DELETED:删除了一个目录

监听特定事件

要处理特定类型的文件系统事件,您可以使用专用函数。以下是仅监听文件创建的示例。

use Spatie\Watcher\Watch;

Watch::path($directory)
    ->onFileCreated(function (string $newFilePath) {
        // do something...
    });

以下是一些相关可用方法

  • onFileCreated():接受一个闭包,该闭包将传递新文件的路径
  • onFileUpdated():接受一个闭包,该闭包将传递更新文件的路径
  • onFileDeleted():接受一个闭包,该闭包将传递删除文件的路径
  • onDirectoryCreated():接受一个闭包,该闭包将传递创建的目录路径
  • onDirectoryDeleted():接受一个闭包,该闭包将传递删除的目录路径

监控多个路径

您可以将多个路径传递给paths方法。

use Spatie\Watcher\Watch;

Watch::paths($directory, $anotherDirectory);

执行多个任务

您可以多次调用onAnyChange、'onFileCreated'等。所有提供的闭包都将执行

use Spatie\Watcher\Watch;

Watch::path($directory)
    ->onFileCreated(function (string $newFilePath) {
        // do something on file creation...
    })
    ->onFileCreated(function (string $newFilePath) {
        // do something else on file creation...
    })
    ->onAnyChange(function (string $type, string $path) {
        // do something...
    })
    ->onAnyChange(function (string $type, string $path) {
        // do something else...
    })
    // ...

优雅地停止监视器

默认情况下,监视器启动后会无限期地运行。要优雅地停止监视器,您可以调用shouldContinue并传入一个闭包。如果闭包返回一个假值,监视器将停止。指定的闭包将每0.5秒执行一次。

use Spatie\Watcher\Watch;

Watch::path($directory)
    ->shouldContinue(function () {
        // return true or false
    })
    // ...

更改监视器速度

默认情况下,更改每0.5秒追踪一次,但您可以更改此设置。

use Spatie\Watcher\Watch;

Watch::path($directory)
    ->setIntervalTime(1000000) //unit is microsecond therefore -> 0.1s
    // ...rest of your methods

注意:没有进行基于轮询的文件监视。

测试

composer test

Supervisord示例配置

创建一个新的Supervisord配置来监视调用监视器的Laravel artisan命令。在使用Supervisord时,您必须在命令参数中指定您的Node.js和PHP可执行文件:env PATH="/usr/local/bin"用于Node.js,PHP的绝对路径以及您的项目路径。

[program:watch]
process_name=%(program_name)s
directory=/your/project
command=env PATH="/usr/local/bin" /absolute/path/to/php /your/project/artisan watch-for-files
autostart=true
autorestart=false
user=username
redirect_stderr=true
stdout_logfile=/your/project/storage/logs/watch.log
stopwaitsecs=3600

更新日志

请参阅更新日志获取最近更改的更多信息。

贡献

请参阅贡献指南获取详细信息。

安全漏洞

请查看我们的安全策略了解如何报告安全漏洞。

鸣谢

本包的部分灵感来自Laravel Octane

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。