通过PHP分发静态内容的最佳实践是什么?

时间:2015-05-12 21:18:48

标签: php apache file-upload

这是关于如何处理用户上传并将静态内容分发给大量并发用户的最佳实践问题。

我有一个图片上传表格(png,jpg,gif)和其他形式的多媒体(mp4,webm)。这些文件在storage/app/attachments/中创建,散列并存储为散列,没有扩展名。

请求网址/file/md5/filename(例如/file/9d42b752ecd0e3b4542aeca21c7c50a9/dancing_cat.gif)将使用该名称分发文件。该路由非常灵活,因此将dancing_cat.gif替换为boring_cat_dancing_poorly.gif仍将获取相同的文件,但会使用指定的新文件名进行分发。

此系统的目的是阻止上传重复项,同时保留上传者拥有的文档的原始名称。上传的同一文件的其他实例也将保留其名称。

我为此工作的代码,然而,人们提出通过PHP分发静态内容的问题。有人告诉我,在我的大型目标平台上,这个系统运行效果不佳,会立即成为瓶颈。我被告知我应该在Apache / nginx / Lighhttpd /任何网络服务器中使用路由来尝试通过在遇到PHP之前捕获请求URL来直接提供静态文件,但这可能会导致mime类型出现问题(即图像不会呈现正确)。

我的问题是:实现目标的最佳做法是什么?一个大型网站如何处理分发静态,用户上传的内容,同时避免“PHP瓶颈”。我很早就进入了考虑重大改写的项目,所以请尽可能提供信息。

1 个答案:

答案 0 :(得分:0)

我希望我能清楚问题是什么,但是,您可以尝试使用sha1或任何更短的编码器来散列您当前的用户名和文件名以及文件扩展名,并生成一个哈希值,并且很难与theese组合生成相同的哈希并添加生成哈希到ur dir中保存的文件名。例如

/file/9d42b752ecd0e3b4542aeca21c7c50a9/gifhse3peo40ed-user_photo.jpg

然后您可以为每个用户分配哈希值,例如为特定用户创建特定文件夹以保存他的上传内容,这样当用户重新上载任何文件时,代码将知道保存的位置,反之亦然。

希望它有所帮助!