使用php安全和恢复支持文件下载

时间:2009-09-22 12:18:41

标签: php download

我想允许某些网站用户下载特定文件。 为了方便用户,下载需要恢复支持。

出于这个原因,我想到了使用这段代码来保护文件:

// Check for user session and privileges if it's okay continue
ob_end_clean();
$data = file_get_contents("c:\\newdata.pdf");
$showname = "newdata.pdf";

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=\"".$showname."\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".strlen($data));
echo $data;

问题是,它不仅不是恢复支持,而且gonno给我的网络服务器带来了很大的开销,而且对于大文件的file_get_contents也需要大量内存,对于大于134217728字节的文件,你会收到此错误消息:

  

允许的内存大小为134217728字节   筋疲力尽(试图分配188862464   字节)

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

使用readfile($fileName)将文件数据直接传递给客户端。

编辑:如果你想要简历支持,你必须编写一个允许你指定起始字节的readfile版本。使用fopen/fread可以轻松完成此操作。没有必要将所有内容都读入内存 - 您只需读取一块,发送它,读取另一块,发送它等等

答案 1 :(得分:1)