0
我尝试使用下面的代码,允许从我的网站下载:PHP打印(FREAD(...))内存不足错误
while(!feof($file)) {
print(fread($file, 1024*8));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
已下20MB的文件工作的伟大,但我最近提供了一个大约150MB的文件,并很快发现正在下载不超过80MB的文件。经过大量的研究,我发现内存不足的错误的不完整的文件的最后几行:
致命错误:内存(分配82313216)(试图 分配81530881个字节)
我的理解是print(fread(...))从文件中分配并读取(1024 * 8)字节,通过打印转储它们,然后使用相同的8192字节读取/转储下一部分文件。
显然我有什么问题,谁能帮我理解这里发生了什么?以及该问题的任何可能的解决方法?谢谢!
更新:该错误消息是指线302,其是:
while(!feof($file))
此外,浏览器适当地显示进度条,所以我知道正在正确地发送的文件大小。
为什么你不使用'ReadFile的()'(http://php.net/readfile)(作为一个旁注:它通常是一个坏主意,通过静态内容通过PHP只是因为它可能)。它提到“试图分配[〜80MB]”。你确定,这是真正的代码,导致错误? – KingCrunch 2012-01-02 19:17:51
错误信息通常应该指出确切的线......: - ? – 2012-01-02 19:22:37
你使用outbut缓冲?即使通过尝试将其输出到小块中,仍然会将整个文件吸收到内存中。 – 2012-01-02 19:23:07