0

我制作了一个表单,允许用户上传文件(文本文档)。我正在使用由 time() 和用户 ID 组合而成的唯一 (?) 文件名(只有登录的用户可以上传)。

我的问题是无法从外部访问该文件。也就是说,只有上传它的用户或管理员才能看到它,而只需键入 www.domain.com/uploads/file_name.txt 就无法访问它

我知道我可以阻止通过 htaccess 访问文件,但如果我理解正确,即使我以管理员身份(或发送文件的用户)登录后,我也无法打开它。我知道我可以通过 php 在本地打开文件,这样我就可以通过我的管理面板显示内容,但这很痛苦,因为我只能毫无问题地输出纯文本文件。我也无法下载该文件。

在某些情况下,我可以即时生成 pdf 或 rtf 版本,但这需要很长的路要走,因为我需要以复杂的方式详细说明内容。无论如何,我不知道如何处理可能是最常见的 Word 或 OpenOffice 文件,以及如何不丢失格式或其他可能的功能。

有任何想法吗?

4

1 回答 1

1

为什么不显示登录用户的下载链接,例如 www.domain.com/download.php?file=... 代码可能类似于:

if( isset($_GET['file']) && user_is_logged_in() ) {
  $file = DIR_SOME_WHERE .'/'. basename($_GET['file']);
  if( file_exists($file) && user_has_file_access( $file ) ) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
  }
}
于 2012-08-13T10:40:19.397 回答