我在服务器上有一个PHP脚本将文件发送给配方:它们获得一个唯一的链接,然后他们可以下载大文件.有时传输出现问题,文件已损坏或永不完成.我想知道是否有更好的方法来发送大文件
码:
$f = fopen(DOWNLOAD_DIR.$database[$_REQUEST['fid']]['filePath'], 'r');
while(!feof($f)){
print fgets($f, 1024);
}
fclose($f);
Run Code Online (Sandbox Code Playgroud)
我见过的功能如
http_send_file
http_send_data
Run Code Online (Sandbox Code Playgroud)
但我不确定他们是否会奏效.
解决这个问题的最佳方法是什么?
问候
erwing
我已经看到很多关于如何有效地使用PHP下载文件而不是允许直接HTTP请求(保持文件安全,跟踪下载等)的问题.
答案几乎总是PHP readfile().
但是,虽然它在使用大文件进行测试时效果很好,但是当它在拥有数百个用户的实时网站上时,下载开始挂起并且PHP内存限制已经耗尽.
那么readfile()当流量高时,导致内存爆炸的工作原理是什么呢?我以为它应该通过直接写入输出缓冲区绕过大量使用PHP内存?
编辑:(澄清一下,我正在寻找"为什么",而不是"我能做什么".我认为Apache的mod_xsend文件是规避的最好方法)