5

我们想创建一个相对简单的文档存储但是有一些要求。我的想法是,当文件立即到达存储时,由单独的工具/守护程序扫描和处理文件。

(伪)DMS 应该通过 NFS 和 Samba 提供访问。正如我到目前为止所看到的,管道可以很好地将传入的文件传递给一些钩子。但我想知道是否有办法将目录创建为管道。我只见过命名管道。

应该在此目录中获取任何传入文件的过程是一个 PHP 脚本,它应该执行 MIME 类型猜测、CRC32 检查(针对 DB 中的值)......有人提示如何执行此操作吗?

编辑:我希望下面的解释更清楚一些 - 我正在寻找一种通过 Samba 和 NFS 提供“端点”的方法,其中可以放置由病毒扫描和元进程立即处理的文件(并最终存储) .

4

3 回答 3

9

您可以使用FUSE实现一个中间 Linux 文件系统,该文件系统位于您的真实文件系统(后端文件系统)之上,并在最终将数据写入后端之前对数据执行您需要的任何验证。然后,您通过 NFS/Samba 为该文件系统提供服务。

另一种可能性是使用inotify API 来通知某些文件系统树上的更改并执行所需的操作。这种方法的问题在于处理将是异步的,因此恶意软件文件将在短时间内发布,直到它们被扫描和删除。

更新ClamFS正是这样做的!

于 2012-06-24T11:58:08.033 回答
3

如果我对您的理解正确,您要做的是为最终用户提供一个非常简单的界面,该界面集成到他们的文件系统中。他们将在他们的操作系统上看到一个普通的文件夹,他们将复制和移动文件,重命名它们等等。无论他们在计算机上的任何其他文件夹上做什么。

但是,此文件夹不会是后台的真实文件夹。您希望完全控制对此文件夹的操作。当他们将文件复制到此文件夹中时,您需要一个 PHP 脚本来处理它。当他们在这个特殊文件夹下创建一个新文件夹时,另一个 PHP 脚本会处理它。

正如 salva 所建议的,自己创建文件系统接口确实是一个很好的解决方案;但这不是一件容易的事,也不是一件容易的事。由于您提到 PHP 作为您的后端,我认为您需要更高级别的方法。

您的问题有两个方面需要处理:客户端和服务器。在客户端,您需要一个易于挂载为 posix 系统上的文件夹或 Windows 上的驱动器的文件系统。有很多替代方案,如您所提到的,Samba 和 NFS 是其中的两个。

据我了解,您将在 PHP 中执行服务器端。考虑到这一点,我建议使用 WebDav 而不是 Samba 或 NFS。在服务器端实现起来要容易得多。它几乎适用于所有现代操作系统。甚至还有用于 webdav 访问的浏览器插件,因此您可以非常轻松地为您的客户提供多个界面。

在服务器端,如果您使用 PHP,则有一个名为sabredav的开源 php 库。只需在 Google 上快速搜索一下,我什至找到了一个教程

在此设置中,您可以按照自己的方式处理文件。这可以是一个单机系统,方法是将 nginx 或 Apache 之类的 Web 服务器嵌入到您的 PHP 端系统中,或者作为在您的服务器上运行的服务提供。

我希望我正确理解了您的问题,这就是您正在寻找的解决方案。

更新: 如果您没有机会像我建议的那样使用不同的解决方案,那么它确实必须是 Samba 和 NFS;这两种协议在 PHP 中实现起来实在是太多了。这将是一个巨大的负担和长期的头痛。

但是,您可以使用普通的 NFS/Samba 服务器并尝试使用您的应用程序在后台监视文件更新。这意味着您想要提供的特殊功能(如文件标记或病毒扫描)将以可能可接受的延迟可用。要实现这一点,您可以检查系统上的所有文件和文件夹并处理修改/新的文件和文件夹。更简单的事情是使用带有日志记录机制的服务器来记录每个操作并跟踪它们的日志。这甚至比直接连接客户端机器更好。如果您正确地构建系统,即使在非常大的系统上,文件修改和处理它们之间的延迟也会非常合理。为此,nas4free可以是一个非常好的解决方案,因为它提供了来自单个系统的许多接口,并且根据其功能页面,它具有 syslog 功能。

于 2012-06-28T08:26:45.580 回答
2

你真的需要它成为 SMB 或 NFS 共享吗?我认为您最好编写/使用一些自定义服务器代码。SMB 和 NFS 旨在传输普通文件,与您的用例相距甚远

于 2012-06-23T21:38:34.353 回答