通过PHP流式传输大型(200 MB)压缩文件


Streaming large (200 MB) zip through PHP

我正在为我的应用程序创建一个服务器端api。其中一个步骤要求应用程序从我的服务器下载一个非常大的zip文件,但它不能通过下载http://mydomain.com/file.zip来完成。我的应用程序通过一些认证头和其他安全的东西必须由php脚本处理(例如http://mydomain.com/download.php?auth=foo&key=value&etc)

我以前用images做过这种事:

<?php
$can_download = /* some complicated auth stuff */
if($can_download) {
    header('Content-Type: image/jpeg');
    echo file_get_contents('image.jpg');
}
?>

我的问题是:可以用200+ MB的zip文件完成吗?我知道我必须以某种方式修改头文件,可能会使用一些高级php函数,但我找不到任何教程,无论是在这里,在堆栈溢出上,还是在其他任何地方。

编辑:我还必须能够恢复我的下载,因为这是很可能的用户会退出应用程序,虽然它应该能够恢复下载(例如从47%)。这能做到吗?


对于那些寻找答案的人:正确的函数是readfile和'恢复'问题可以使用这个自定义函数来解决。

本例中正确使用的函数是readfile

给定的代码会遇到问题,因为它在将文件内容转发给浏览器之前不必要地将其加载到内存中。这对性能没有帮助,而且很容易导致内存耗尽。

是的,但是您想使用readfile之类的东西。原因是file_get_contents在将整个文件传递给客户端之前将其读入内存。