所以我有一堆文件,有些可以达到30-40mb 我想用php来处理文件的安全性,所以我可以控制谁有权访问它们
这意味着我的脚本类似于这个粗略的例子
$has_permission = check_database_for_permission($user, filename);
if ($has_permission) {
header('Content-Type: image/jpeg');
readfile ($filename);
exit;
} else {
// return 401 error
}
我讨厌每个请求将整个文件加载到内存中,因为它很快会同时请求我的服务器上的所有内存:
所以有几个问题
服务器:apache / php5
感谢
答案 0 :(得分:6)
readfile
是执行此操作的正确方法。无论如何都不要尝试自己读取文件并将其打印到输出 - 将消耗过多的内存。使用readfile
函数,文件的内容将直接缓冲到输出,占用大量的暂时内存。
答案 1 :(得分:3)
最快的方法是将其传递给网络服务器。 Web服务器可以使用sendfile()调用来请求操作系统内核直接从文件复制到网络流。 例如,当使用lighttpd时,有一种方法可以让PHP发信号通知服务器接管并执行sendfile技巧:
http://redmine.lighttpd.net/projects/lighttpd/wiki/X-LIGHTTPD-send-file