通过PHP流式传输大型(200 MB)zip

时间:2013-03-28 11:13:16

标签: php stream zip

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

我之前使用图片做过这种事情:

<?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函数,但我找不到任何教程这里,Stack Overflow,也不是其他任何地方。

编辑我还必须恢复我的下载,因为用户很可能会退出该应用,但它应该可以恢复下载(例如从47%)。可以吗?


对于那些寻找答案的人:正确的功能是 readfile ,并且可以使用 this custom function 来解决'恢复'问题。

2 个答案:

答案 0 :(得分:4)

在此实例中使用的正确函数是readfile

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

答案 1 :(得分:1)

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