将用户上传的文件存储在phpmyadmin中是更好还是将它们存储在文件夹中更好?

时间:2011-02-06 19:02:07

标签: php mysql storage

什么更好?能够在文档或文件夹中存储word docs,pdfs,扫描图像等用户文档。安全是首要问题。我不希望有人像domain.com/user/social/profile/user_images/23432434.png这样做,并且能够看到它。

感谢。

6 个答案:

答案 0 :(得分:2)

之后经常会退回存储在数据库中的文件。仅在数据库中存储文件名或ID。

如果要阻止访问,请将文件存储在DOCUMENT_ROOT之外。创建一个处理访问权限的包装器脚本,并在调用时使用readfile()X-Sendfile:。 (对于SQL存储的资源,您基本上也会这样做。)

答案 1 :(得分:1)

如果安全性是最重要的问题 - 请使用.htaccess并关闭对内容文件夹的公共访问权限。

答案 2 :(得分:1)

您可以将资源保存在公用文件夹(应用程序所在的文档根文件夹)后面,并将其设置为http://myapp.com/assets.php?id=13,其中assets.php抓取文件并输出内容。

现在在assets.php,你可以验证角色等等。

例如:

  • 根文件夹
    • public_html(您的脚本所在的位置)
    • 资产(您的上传所在的位置,公众可能无法访问这些资源,当有人调用assets.php时您可以将其拉出来)

答案 3 :(得分:1)

如果将其存储在数据库或高清中,则不会影响您的操作。重要的是你将如何提供文件。

为此,您可以使用任何类型的哈希函数。

  1. 在DB
  2. 中为每个用户添加“salt”字段
  3. 然后你可以做例如md5(md5({filename})。salt)
  4. 如果将它与验证码结合使用,检索这些文件将非常困难。

答案 4 :(得分:1)

将文件存储在服务器的根目录之上。

例如:

/ var / www / - 您的服务器根目录。公开提供 / var / documents - 这里的用户文件。在根之上,而不是公开可见。

服务您的文件:

/var/www/serve.php

#add headers
echo file_read_contents("/var/documents/file.doc");

答案 5 :(得分:1)

在sql中保存文件可能会导致速度变慢等问题。 你可以使用

# no one gets in here!
deny from all
在.htaccess中

并使用 echo file_get_contents($ filename); readfile($ filename);