使用php保护并恢复支持文件下载

使用php保护并恢复支持文件下载,php,download,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

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

因此,我想到用以下代码保护文件:

// 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;
问题是,不仅它不支持恢复,而且它也不会给我的Web服务器带来很大的开销,而且需要大量的内存来存储文件内容。对于大文件,同样对于大于134217728字节的文件,您将收到以下错误消息:

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

有什么建议吗?

用于将文件数据直接传递给客户端


编辑:如果您想要恢复支持,您必须编写一个readfile版本,允许您指定起始字节。这可以通过
fopen/fread
轻松完成。无需将所有内容读入内存-您只需读取一个块,发送它,读取另一个块,发送…等

检查此相关问题:

此方法不支持恢复仅
应用程序/octet流
是应由客户端下载的二进制数据的官方媒体类型。其ByteService可能重复不下载:(