PHP readfile()和大量下载

PHP readfile()和大量下载,php,download,Php,Download,在建立一个在线文件管理系统时,现在我遇到了一个障碍 我正在尝试使用以下方法将文件推送到客户端: 但是,当我试图下载一个13MB的文件时,它只是以4MB的速度中断。 这里的问题是什么?这绝对不是任何形式的时间限制,因为我在本地网络上工作,速度不是问题 PHP中的内存限制设置为300 MB 感谢您的帮助。您很可能达到了Web服务器设置的响应缓冲区限制。已知IIS和FastCGI的默认缓冲区大小为4mb。我将从查看webserverPHP SAPI配置开始您的搜索。不要刷新您的输出,而是尝试对其进行缓

在建立一个在线文件管理系统时,现在我遇到了一个障碍

我正在尝试使用以下方法将文件推送到客户端:

但是,当我试图下载一个13MB的文件时,它只是以4MB的速度中断。 这里的问题是什么?这绝对不是任何形式的时间限制,因为我在本地网络上工作,速度不是问题

PHP中的内存限制设置为300 MB


感谢您的帮助。

您很可能达到了Web服务器设置的响应缓冲区限制。已知IIS和FastCGI的默认缓冲区大小为4mb。我将从查看webserverPHP SAPI配置开始您的搜索。

不要刷新您的输出,而是尝试对其进行缓冲,然后将其完整地发送到客户端

ob_clean(); // in case anything else was buffered
ob_start();

// do read/echo operations

ob_end_flush();

几乎可以肯定的是,错误日志中有一些东西,假设您已经打开了它。检查并修改问题。不。错误日志中没有与此相关的内容。我所拥有的只是来自不同脚本的一些弃用警告。您使用哪个客户端来下载内容?如果使用不同的客户端,行为是否会发生变化?我猜您使用的代理无法处理大数据块编码。尝试使用不同的客户端和/或嗅探流量。@symcbean-我尝试使用IE和Chrome,两者的响应方式相同。如果他们不能处理分块编码,我相信他们不应该占用前4MB。还有,如何嗅探交通?我以前没这么做过。谢谢一个优秀的包嗅探器是。检查错误发生后数据是否仍在流式传输,并检查是否有任何错误消息由于某种原因被发送回您看不到的位置。增加缓冲区限制是否还有其他缺点?将其设置为50MB是否会给一般浏览体验带来问题?感谢您提供的任何见解。除了Web服务器的潜在内存占用之外,现在没有了,而且内存也很便宜。
注意:
我希望我对这个问题有更多的答案,但是既然悬赏即将结束,我不得不给出这个答案。他为什么要这样做?使用replacement readline()函数的全部目的是避免将整个文件一次读入PHP的内存空间。你的回答完全违背了这个目的。@timdev-你是说
readfile()
函数吗?是的,你说得对。我们希望避免将文件作为一个整体发送。那么,您的问题不够精确,对我来说,您似乎希望避免从文件系统中读取文件。顺便问一下,为什么你有300 MB的内存限制…?@zolex-300 MB的内存限制是出于各种性能原因,而不仅仅是上传和下载文件。出于性能原因?是的,当一个脚本变得疯狂时,它会向服务器收费。^^300mb对于一个web前端应用程序来说太多了^^
ob_clean(); // in case anything else was buffered
ob_start();

// do read/echo operations

ob_end_flush();