我正在为我的应用程序创建一个服务器端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
在将整个文件传递给客户端之前将其读入内存。