php - 使用 MVC 的文档共享应用程序

标签 php model-view-controller projects-and-solutions

客户给我分配了一项新任务,一个使用 MVC 设计模式制作的文档共享应用程序。以下是要求:

  • 使用浏览器上传和下载文件

  • 如果文件更安全,则将文件存储在 db 中,否则将文件存储在启用密码选项或无需密码即可访问的目录中

  • 每个用户都将拥有自己的文档目录/工作区,他也可以从中与其他用户共享文档。和公共(public)共享区域共享和上传文件

  • super 管理员将能够监控文件上传日志记录以进行监控。

我有一个大概的想法,但我真的很想知道您对以上几点的看法,尤其是上面加粗的部分。

上面的第三点是最重要的,我不确定从哪里开始以及如何记录上传。

我基本上是在询问有关第三点和第四点的实现细节。

最佳答案

以下是我如何使用 CakePHP 实现它并且它运行良好。首先,我确保我的应用程序代码位于公共(public) html 目录之上,这样它就不会暴露在网络上。所以基本上,用户可以直接访问的唯一文件是 index.php 文件、css/js 和图像文件。

然后,我更新我的文件管理模型以即时保存和删除文件:

function beforeSave() {
    extract($this->data['Upload']['file']);
    if(isset($name) and !empty($name)) {
        $filename = time().'-'.$name;
        if ($size && !$error) {
            move_uploaded_file($tmp_name, APP . 'media/files/' . $filename);
            $this->data['Upload']['file'] = $filename;
            $this->data['Upload']['name'] = $name;
            $this->data['Upload']['file_type'] = $type;
        }
    } else {
        // remove the photo so it is not updated
        unset($this->data['Upload']['file']);
    }
    return parent::beforeSave();
}

function beforeDelete() {
    $data = $this->read(null, $this->id);
    if( is_file( APP . 'media/files/' . $data['Upload']['file'])) {
        unlink(APP . 'media/files/' . $data['Upload']['file']);
    }
    return true;
}

这将管理文件上传并将所有命名信息放入数据库。由于 Web 无法访问 app/media/files 目录,因此我不必保护该目录。这意味着无论用户想要什么文件,他们都必须从网站访问它。

然后,您所要做的就是确保模型表有一个“可共享”标志,供用户指示该文件可供全世界访问,然后任何人都可以看到该文件并下载它。

关于php - 使用 MVC 的文档共享应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3502844/

相关文章:

php - 我可以检查 Magento PHTML 文件中的 HTTPS 吗?

php - Doctrine 映射字段不起作用

mysql - 将数据透视表连接到另一个表(HABTM 连接 HABTM 和模型关联)

asp.net-mvc - 成员(member)提供商中的 GetAllUsers 在哪里?

php - 如何从 php 中的 json_decode 获取 id

model-view-controller - Extjs MVC - 在 Controller 中设置存储事件

c - 如何在 C 语言中组织一个项目中的多个主文件?

c++ - 为多个项目和配置有效地使用 Visual Studio 项目属性

c# - 是否有任何可靠的(甚至是标准化的)方法来创建同时支持多个目标框架的 .NET 库?

php - 在php中按值对多维数组进行分组