php大多数内存有效的方式返回文件

时间:2010-06-09 21:50:05

标签: php apache

所以我有一堆文件,有些可以达到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
}

我讨厌每个请求将整个文件加载到内存中,因为它很快会同时请求我的服务器上的所有内存:

所以有几个问题

  1. 是readfile最有效的内存方式吗?
  2. 是否有一些更好的方法可以实现相同的结果,我忽略了?
  3. 服务器:apache / php5

    感谢

2 个答案:

答案 0 :(得分:6)

readfile是执行此操作的正确方法。无论如何都不要尝试自己读取文件并将其打印到输出 - 消耗过多的内存。使用readfile函数,文件的内容将直接缓冲到输出,占用大量的暂时内存。

答案 1 :(得分:3)

最快的方法是将其传递给网络服务器。 Web服务器可以使用sendfile()调用来请求操作系统内核直接从文件复制到网络流。 例如,当使用lighttpd时,有一种方法可以让PHP发信号通知服务器接管并执行sendfile技巧:

http://redmine.lighttpd.net/projects/lighttpd/wiki/X-LIGHTTPD-send-file