在网站上传和存储图片的最佳方式是什么?

时间:2012-01-19 06:44:32

标签: php file-upload

我不知道大型网站如何将图片保存在他们的服务器上。有谁能告诉我他们如何保存用户在他们的数据库中上传的图片?

我在想,也许他们只是将文件(图片)保存在某个路径中,只是在数据库中保存该路径就是这样吗?

但我想这样做。这是正确的吗?例如,一个名为www.photos.com的网站。当用户上传图片时,我会创建一个用户名的文件夹,并将这些图片保存在该文件夹中。

我相信我们可以使用php file concepts创建一个目录。因此,当新用户上传他的图片或文件时,我想创建一个名为他的目录。

示例:如果用户名是john,我会在photos.com www.photos.com/john/上创建这样的目录,然后在上传图片时将所有图片保存到此目录中。这是正确的方法吗?

我这里没有人知道将文件保存到服务器,所以请告诉我怎么做?我想以正确和安全的方式做到这一点。

3 个答案:

答案 0 :(得分:166)

所有大型网站都不会将图片保存到数据库,它们会将它们存储在磁盘中。 它们保存了对图片在表格中位置的引用。然后从那里链接。

为什么呢?性能

从数据库中提取大量内容是一个巨大的性能瓶颈。并且数据库不能横向扩展,因此这意味着更大的问题。所有大型网站都使用静态内容服务器场来处理静态内容,例如图像。那些不关心你身份的服务器。

他们如何保持你可能会问的照片真的私密?他们没有。

图片的链接本身就是地址和密码。我们以Facebook为例。如果我在我的帐户上存储私人照片,则您无法打开它。但是,只要你有正确的地址,你就可以。

This picture is private请注意文件名
10400121_87110566301_7482172_n.jpg
(Facebook会不时更改网址,因此链接可能会被破坏)

这是非顺序的。获得图片的唯一方法是知道它的地址 根据之前的用户照片,您无法猜测下一张用户照片 它有一个巨大的熵,所以即使你开始随机猜测你会有大量的失败,如果你做了一个图片,你将无法从那里,实现所有者的身份,本身就是匿名保护。

编辑(为什么不应将图像存储在“用户名”文件夹中
编辑后,很明显您确实打算将文件放在磁盘上,而不是放在数据库上。此编辑涵盖新方案。

即使您的逻辑(为每个用户创建一个文件夹)接缝更加有条理,但当您开始拥有许多用户和许多图片时,它会产生问题。想象一下,您的服务器有1T磁盘空间。并且我们还可以想象1T对于服务器可以处理的负载来说或多或少是准确的。

现在您有11个用户,假设他们同时开始上传,每个用户都会上传超过100GB的文件。当它们各达到91GB时,服务器已满,您必须开始在不同的服务器上存储图像。如果遵循该用户/文件夹结构,则必须选择其中一个用户并将其所有数据迁移到其他服务器。此外,它对无法在文件中上传超过1T的用户设置了硬限制。

我应该将所有文件存储在同一个文件夹中吗?
不,大型网站通常将文件存储在顺序文件夹(/ 000001 /,/ 000002 /等)中,每个文件夹具有x定义的文件数。这主要是针对文件系统性能问题。

更多关于how many files in a directory is too many?

答案 1 :(得分:3)

最好通过将图像物理上传到服务器,然后在数据库中记录文件位置和图像细节来实现图像管理。随后,可以将搜索表单配置为允许用户进行文本搜索,部件号搜索或其他查询。可以编写PHP脚本以根据表中的数据生成有效的HTML图像标记。

将图像上传到MySQL™BLOB字段是一个坏主意,如果图像比缩略图大得多,则这种图像数据通常是有问题的。如果图像很大,您最终可能必须一次复制/粘贴一个SQL INSERT语句(进入phpMyAdmin)。如果图像很大并且文本编辑器将SQL INSERT语句分成两行,您将永远无法恢复图像。

答案 2 :(得分:3)

  

这是正确的做法

是。
我建议使用的唯一不是名字而是id www.photos.com/albums/1234/对于首发来说是可以的。