Php 用于存储数百万图像的文件夹结构?
我正在建立一个网站,可以轻松上传数百万张照片(每上传一张图片都有3个缩略图),我需要找到存储所有这些图片的最佳方法 我已经搜索并找到了以散列形式存储的图像示例。。。。例如 如果我上传coolparty.jpg,我的脚本会将其转换为Md5哈希,结果是Php 用于存储数百万图像的文件夹结构?,php,mysql,photo,storage,Php,Mysql,Photo,Storage,我正在建立一个网站,可以轻松上传数百万张照片(每上传一张图片都有3个缩略图),我需要找到存储所有这些图片的最佳方法 我已经搜索并找到了以散列形式存储的图像示例。。。。例如 如果我上传coolparty.jpg,我的脚本会将其转换为Md5哈希,结果是 dcehwd8y4fcf42wduasdha.jpg 它存储在/dc/eh/wd/dcehwd8y4fcf42wduasdha.jpg 但是对于3个缩略图,我不知道如何保存它们 问题.. 这是存储这些图像的正确方法吗 我如何储存缩略图 在PHP中,
dcehwd8y4fcf42wduasdha.jpg
它存储在/dc/eh/wd/dcehwd8y4fcf42wduasdha.jpg
但是对于3个缩略图,我不知道如何保存它们
问题..
3) ???您是在询问如何将文件写入文件系统还是…?如何使用文件夹结构:
- 我正在上传照片,并按你说的那样移动它:
$image = md5_file($_FILES['image']['tmp_name']); // you can add a random number to the file name just to make sure your images will be "unique" $image = md5(mt_rand().$image); $folder = $image[0]."/".$image[1]."/".$image[2]."/"; // IMAGES_PATH is a constant stored in my global config define('IMAGES_PATH', '/path/to/my/images/'); // coolparty = f3d40fc20a86e4bf8ab717a6166a02d4 $folder = IMAGES_PATH.$folder.'f3d40fc20a86e4bf8ab717a6166a02d4.jpg'; // thumbnail, I just append the t_ before image name $folder = IMAGES_PATH.$folder.'t_f3d40fc20a86e4bf8ab717a6166a02d4.jpg'; // move_uploaded_file(), with thumbnail after process // also make sure you create the folders in mkdir() before you move them
- 我相信这是最基本的方法,当然,你可以改变文件夹结构到一个更深层的,就像你说的,如果你有数百万张图片,有2个字符
/aa/bb/cc/aabbccdddddddddddddd_large.jpg
/aa/bb/cc/aabbccdddddddd_full.jpg 或类似
如果你说的是数百万张照片,我建议你将这些照片转包给第三方,比如AmazonWeb服务,更具体地说,就是这个AmazonS3。文件的数量没有限制,并且假设您不需要实际列出文件,则根本不需要将它们分隔到目录中(如果确实需要列出,则可以使用不同的delimeter和前缀-)。而且,您的托管/重新访问成本可能会比您自己的成本更低,而且它们会得到备份 更具体地说,是的,按子目录拆分;使用您的结构,您可以删除文件名的前5个字符,因为您已经准备好将其放在目录名中 正如阿奎那所建议的那样,拇指只是出现在文件名上。或者将它们存储在单独的文件夹中。改进答案 对于数以百万计的图像,使用数据库会减慢处理速度是正确的 最好的选择是使用“服务器文件系统”存储图像,并使用.htaccess添加安全性 或者您可以使用web服务。许多服务器都提供了用于上传、显示图像的Api。
你也可以选择这个选项。例如,Amazon在数据库中存储数以百万计的图像不是正确的方法。从数据库中提取图像并显示它们比使用文件访问要慢。当然也比文件访问要慢system@Hameed-你有证据支持这个说法吗?我正在失去找到这个的裁判。。但在搜索之后,我发现了另一种方法,因为从数据库中提取图像并显示它们比使用文件访问要慢。考虑到有多少图像,将这些图像存储在传统的sql数据库中不是一种好方法。像Cassandra、Redis、Riak等这样的无sql数据库更容易接受,但文件系统应该是第一考虑因素。@Hameed-我认为这样的笼统陈述是不合理的。涉及的变量太多。(数据库缓存;文件系统争用;分布式文件系统等)如果需要任何类型的锁定,数据库可能比自制的基于文件的锁定系统更加健壮和灵活。@Hameed,正如我所说,您的里程可能会有所不同。我没有注意到问题被标记为MySQL。在SQL Server中,有一个FileStream数据类型:正是出于此目的。此外,在MySQL中,您能否创建一个触发器,允许您从文件系统中删除文件(以模拟级联删除)?这可能是可能的,我只是不知道该怎么办。希望你有一个拥有大量带宽的descent spec服务器。如果你有两个用户上传一个名为
coolparty.jpg
的文件,会发生什么?你需要将用户名作为文件名的一部分存储在某个地方吗?对于那些因为“速度慢”而口碑不好的数据库来说——没有数字支持,这只是空话。是的,数据库可能很慢。文件系统也可能很慢。(试着把一百万甚至50000张图片放在一个目录中,看着你的文件访问时间飞涨。)至于数据库,这就是使用数据库的理由。另外,请参见网站管理员。这个实现可能很有用:github.com/acrobit/AcroFSok,关于S3服务,目前我不打算这么做,但如果我坚持目前的方法,我会考虑,如果我决定将所有文件都移动到S3,那么将所有文件都转移到那里会很容易吗?编写一个脚本将所有文件从文件系统移动到S3会很容易。您甚至可以维护您的目录结构。+1表示感谢。s3是一个非常好的服务。是的-一旦项目启动并运行,你可以将它们全部移动。但是设置AmazonS3最复杂(也是最烦人)的事情是注册一个