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

Php 在网站上上传和存储图片的最佳方式是什么?,php,file-upload,Php,File Upload,我不知道大型网站如何将图片保存在服务器上。有谁能告诉我,他们如何将用户上传的图片保存到数据库中 我在想,也许他们会将文件(图片)保存在某个路径中,然后将该路径保存在数据库中,对吗 但我想这样做。是这样吗?例如,一个名为www.photos.com的网站。当用户上传图片时,我会创建一个用户名文件夹,并将这些图片保存在该文件夹中 我相信我们可以使用php文件概念创建一个目录。所以当一个新用户上传他的图片或文件时,我想用他的名字创建一个目录 示例:如果用户名是john,我会在photos.comwww

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

我在想,也许他们会将文件(图片)保存在某个路径中,然后将该路径保存在数据库中,对吗

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

我相信我们可以使用
php文件概念
创建一个目录。所以当一个新用户上传他的图片或文件时,我想用他的名字创建一个目录

示例:如果用户名是john,我会在photos.com
www.photos.com/john/
上创建一个类似这样的目录,然后在他上传图片时将他的所有图片保存到此目录。这样做对吗


我没有人在这里有很好的知识,保存文件到服务器,所以请让我知道如何做到这一点?我想用正确和安全的方式来做。

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

为什么??表演

从数据库中提取大量内容是一个巨大的性能瓶颈。而且数据库在水平方向上的伸缩性没有那么好,所以这意味着一个更大的问题。所有大型网站都使用静态内容农场来处理静态内容,如图像。这些服务器不会对您的身份漠不关心

你可能会问,他们是如何将照片保密的?他们没有

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

注意文件名
10400121\u 87110566301\u 7482172\u n.jpg

(facebook会不时更改url,以便断开链接)

这是不连续的。获取图片的唯一方法是知道它的地址。
基于上一张用户照片,您无法猜测下一张。
它有一个巨大的熵,所以即使你开始随机胡乱猜测,你也会有大量的失败,如果你真的得到了一张照片,你将无法从那里认识到所有者身份,这本身就是匿名保护

编辑(为什么不应将图像存储在“用户名”文件夹中:
在编辑之后,很明显您的意图是将文件放在磁盘上而不是数据库上。此编辑涵盖了新的场景

即使您的逻辑(每个用户创建一个文件夹)更加有序,但当您开始拥有多个用户和多张图片时,也会产生问题。假设您的服务器有1T磁盘空间。同时,让我们假设1T在服务器可以处理的负载方面或多或少是准确的

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

我应该将所有文件存储在同一个文件夹中吗?
不,大型站点通常将文件存储在顺序文件夹(/000001/、/000002/)中,每个文件夹的文件数为x。这主要是为了解决文件系统性能问题


更多信息

在数据库中存储图像通常是一个坏主意(如果您的站点很受欢迎)。传统上,数据库是大多数应用程序的主要瓶颈之一。无需过度加载。如果图像位于文件系统中,许多http服务器(例如)将最有效地为其提供服务

俄罗斯最大的社交网络正是这样做的:将图像存储在文件系统中

另一个大型社交网络实现了一个复杂的可扩展blob存储,但它不向公众开放


此答案摘要:不要在数据库中存储blob。

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

将图像上传到MySQL™ BLOB字段是一个非常糟糕的主意,如果图像比缩略图大得多,则此类图像数据通常会出现问题。如果图像大,则最终可能不得不一次复制/粘贴一条SQL INSERT语句(到phpMyAdmin中)。如果图像很大,并且SQL INSERT语句被文本编辑器分为两行,则无法还原图像

这样做对吗

是的。
我唯一建议使用的不是姓名而是id。

www.photos.com/albums/1234/
初学者可以。

@AdrianCornish你能告诉我你尝试过什么是什么意思吗?我不是要你为我写代码,我只是想要大多数人遵循的算法或过程,这样我就可以继续,如果我知道做什么的话。你尝试过什么?你可以存储到你可以将二进制数据存储在数据库中。你真正的问题是什么?你的问题措辞很糟糕-你问的是如何上传图片,而不是如何将图片上传到你的网站。你在做什么来保护用户不上传恶意代码、带有隐藏有效载荷的图片、停止下载