1

我正在为我的应用程序创建一个服务器端 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并且可以使用这个自定义函数来解决“恢复”问题。

4

2 回答 2

4

在这种情况下使用的正确函数是readfile.

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

于 2013-03-28T11:14:23.390 回答
1

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

于 2013-03-28T11:14:36.730 回答