我搭建了一个简单的文件托管服务,为文件分配唯一的id并将其存储在一个目录中。我被告知这将会在未来引起问题,因此想知道有哪些事情需要注意,以确保它能够顺利地运行到未来及更远的未来。
此外,通过发送头信息和readfile()强制下载是否存在性能问题?保留文件名并允许直接下载而不是使用脚本是否更好?
谢谢。
此外,通过发送头信息和readfile()强制下载是否存在性能问题?保留文件名并允许直接下载而不是使用脚本是否更好?
谢谢。
hxxp://www.example.com/files/1234/Lovely_long_filename_that_can_contain_any_Unicode_character.zip
hxxp://www.example.com/realfiles/1234.dat
并由Web服务器(快速)提供服务。
首先,你的第一个问题取决于所使用的文件系统类型。在回答时,我会假设你使用的是未经任何日志优化的ext3。
首先,当文件数量超过系统ARG_MAX时,一个位置上有太多文件可能会导致问题。换句话说,rm -rf * 命令将退出并抱怨参数太多。你可以考虑根据其唯一名称最左边的字节的值适当地将文件停放在A-Z / a-z目录中。
此外,尽量避免在短时间内打开所有这些文件的进程...像“updatedb”这样的cron一旦开始真正填充就会出现问题。同样,尽量将这些目录排除在类似“find”之类的命令范围之外。
这引出了另一个潜在的问题,即缓冲区。这些文件有多频繁地被访问?如果在给定目录中有300个文件,是否所有文件每30分钟至少被访问一次?如果是这样,你可能需要调高/proc/sys/vfs_cache_pressure设置,以便Linux回收更多内存并使其可用于PHP/Apache/Etc。
最后,关于readfile…我建议只使用直接下载链接。这避免了PHP在下载过程中需要保持活动状态的情况。