0

我正在尝试找到一种方法来监视有关我的应用程序文件系统上文件访问的基本信息。这些文件使用公共驱动程序存储,并可通过适当的符号链接公开使用。每当访问文件时,我想将记录添加到数据库中。有没有办法在不创建单独的控制器的情况下做到这一点?也许是文件系统中间件类型机制?

4

1 回答 1

1

首先,静态文件不会由您的 PHP 应用程序(在本例中为 Laravel)处理,而是由您的 Web 服务器(Nginx、Apache 等)处理。
如果是 PHP 请求,通常的配置只会将请求路由到 PHP,如果是静态文件,则只会提供文件。

您可以告诉 Web 服务器通过应用程序的特定 URL 路由所有静态文件,然后在您的控制器中提供该文件并保存统计信息,但我建议您不要这样做,因为 Web 服务器提供的静态文件非常有效,并且如果您通过 PHP 应用程序处理它们,您将添加许多影响性能的工作。

一个解法

您可以创建一个 Laravel 控制台命令,该命令会调用日志文件的每一行,并使用 SupervisorD 来确保始终调用该命令。

所以,你可以有这样的东西来调用你的命令:

tail -F -n 1 /path/to/access.log | /usr/bin/php /path/to/application/artisan register:log

在哪里-F处理日志轮换,-n 1将使用最后一行(或者您可以尝试使用-n 0)来确保如果由于某种原因进程重新启动并且register:log可以成为 Laravel 中控制台命令的签名,您不会考虑旧行。

这样,访问日志中的每一行都会以日志行作为输入来调用您的命令。

于 2016-09-24T17:15:13.003 回答