Php 处理用户映像上载的推荐体系结构
过去,我以两种不同的方式处理用户图像上传:Php 处理用户映像上载的推荐体系结构,php,web-applications,upload,photo,Php,Web Applications,Upload,Photo,过去,我以两种不同的方式处理用户图像上传: 将图像数据保存在数据库表中,并通过PHP脚本加载 上传图像,将其转换为jpeg格式,将其放入目录中,并通过HTML标记加载 第一个选项运行得相当好,但我必须对上传的图像保持相当严格的大小限制。第二个选项是可行的,除了PHP的图像库经常会破坏文件转换(不过,我认为这可以通过使用ImageMagick来解决) 我现在面临着第三次这样做,在一个潜在的更大规模的用户。我已经计划在上传后使用ImageMagick对图像进行一些后期处理。我希望上传图片的限制尽
- 将图像数据保存在数据库表中,并通过PHP脚本加载
- 上传图像,将其转换为jpeg格式,将其放入目录中,并通过HTML标记加载
编辑:
当您需要处理大量请求时,Aaron F所说的话非常重要。对映像/sql数据进行分区是实现可伸缩性的好方法。您需要查看应用程序中的访问模式,以确定分区点的位置。为了减少SQL负载,您可以更快地为库缓存生成的HTML。您引用的两个示例没有阐明最重要的部分:分区 e、 g.如果存储在数据库中,图像是否完全驻留在一个数据库服务器上的一个表中?或者该表是跨多个服务器/集群分区的 e、 g.如果存储在目录中,是否所有图像都驻留在一个硬盘上?或者图像是否根据用户登录名的第一个字母映射到单独的[RAID]驱动器 为了实现可伸缩性,需要一个好的分区方案
至于批量显示缩略图,您可能需要在此处进行一些预计算。i、 e.创建缩略图(可能通过ayschronous作业,在上传图像后立即启动),并将其放置在专用服务器上。Youtube就是这样对上传的视频进行图像快照的 Imho,David的解决方案在大多数情况下都是最好的,但我要修改两个细节: 在数据库中存储每个图像的完整路径 我认为您不需要存储完整路径,因为如果由于某种原因图像目录发生更改,这将使您的生活变得复杂一点。只存储文件名就足够了。您始终可以在html中直接包含完整路径 制作图像的缩略图(比如ImageMagick),其文件名与图像本身略有不同,但与真实图像一起存储 我更喜欢将缩略图放在不同的目录中,每个缩略图对应一个目录,并且具有完全相同的文件名。我曾经在一个有数千张用户图片的网站上工作,我犯了一个错误,把它们都放在同一个目录中。该目录增长如此之快,以至于几乎不可能在不等待几分钟的情况下打开该目录 PHP的图像库经常会破坏文件转换 我建议在创建thumb的脚本中增加内存限制,特别是在允许上传大(2mb+)文件的情况下
您可以使用
ini_set('memory_limit','30M')来实现这一点代码>。当然,实际数字由你决定。30M曾为我在缩略图较多的网站上工作。uhm要创建缩略图,请使用。。。这是绝对完美的事情。。。还有一些额外的,但你可能不需要这些。。。它会自动在文件系统上创建一个本地缓存,因此非常节省资源
我认为,混合方法可能是最具可扩展性的,即将文件存储在文件系统中,并将文件位置存储在数据库中。。。这样,您就可以在文件中存储一些元数据(如创建者、标题、标记等),并保持数据库的小型化。。。此外,您可以将图像存储在任意位置(甚至在其他机器上,等等),因此您可以轻松地分发所有有效负载
格里茨
back2dos几年前,我写了一个内部网图像存档,最终存储了大约34万次扫描和相关缩略图。通过谷歌搜索,我发现只要不要求底层操作系统列出文件夹列表,就没有理由不将它们全部转储到一个目录中。换句话说,调用ls/dir将挂起计算机,但仅通过文件名(从数据库)检索单个图像文件并不意味着性能损失