我想允许某些网站用户下载特定文件。 为了方便用户,下载需要恢复支持。
出于这个原因,我想到了使用这段代码来保护文件:
// 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 字节)
有什么建议吗?
答案 0 :(得分:1)
使用readfile($fileName)
将文件数据直接传递给客户端。
编辑:如果你想要简历支持,你必须编写一个允许你指定起始字节的readfile版本。使用fopen/fread
可以轻松完成此操作。没有必要将所有内容都读入内存 - 您只需读取一块,发送它,读取另一块,发送它等等
答案 1 :(得分:1)