所以我有一堆文件,有些可以高达30-40mb 和我想用PHP来处理文件的安全性,所以我可以控制谁有权访问他们php大多数内存有效的方式来返回文件
这意味着我有一个剧本有点像这个粗略的例子
$has_permission = check_database_for_permission($user, filename);
if ($has_permission) {
header('Content-Type: image/jpeg');
readfile ($filename);
exit;
} else {
// return 401 error
}
我会恨的每个请求加载完整的文件到内存中,因为它很快就会嚼了所有的记忆我的服务器上一些同时请求
所以一对q问题
- readfile是最有效的内存方式吗?
- 是否有一些更好的方法来实现相同的结果,我忽略了?
服务器:Apache/PHP5
感谢
+1删除我的答案,当你看着很明显。 – 2010-06-09 21:59:37
我在Pekka的回答中输入了这条评论,它被删除了:“readfile()这样做,直接从文件中将文件复制到网络服务器的内存中。循环将数据从文件复制到PHP内存中,然后从PHP内存到网络服务器 随着readfile()系统可以选择一个最好的块大小,它可能不是8192“ – johannes 2010-06-09 22:03:26
只要记住,在整个过程中,一个用户正在下载一个文件,一个PHP进程将被阻止。因此,如果您的服务器上运行了8个PHP进程并且有8个用户正在下载文件,您的网站将无法处理任何涉及PHP的更多请求,这通常意味着网站将完全冻结。 – 0scar 2010-06-09 23:10:26