[英]File download via PHP being mysteriously interrupted on Dreamhost
如果用户具有正确的身份验证,我已经编写了一个简单的PHP脚本来下载隐藏文件。 整个设置工作正常:它发送正确的头,并且文件传输开始正常(结束时很好-对于小文件)。
但是,当我尝试提供150 MB的文件时,该连接在靠近文件中间的位置神秘地中断了。 这是相关的代码片段(从Internet上的某个地方获取并由我改编):
function readfile_chunked($filename, $retbytes = TRUE) {
$handle = fopen($filename, 'rb');
if ($handle === false) return false;
while (!feof($handle) and (connection_status()==0)) {
print(fread($handle, 1024*1024));
set_time_limit(0);
ob_flush();
flush();
}
return fclose($handle);
}
在调用上面的函数之前,我还做了一些其他代码来尝试解决问题,但是据我所知,它什么也没做:
session_write_close();
ob_end_clean();
ignore_user_abort();
set_time_limit(0);
如您所见,它不会立即将整个文件加载到内存中,也不会像这样疯狂。 更令人困惑的是,传输终止的实际时间似乎在50到110 MB之间浮动,并且似乎在彼此之间几秒钟之内终止了到同一文件的所有连接(尝试通过尝试与朋友同时下载)。 没有任何内容附加到被中断的文件,并且我在日志中看不到任何错误。
我正在使用Dreamhost,因此我怀疑他们的看门狗可能正在杀死我的进程,因为它已经运行了太长时间。 有没有人可以分享此事的经验? 可能还有其他问题吗? 有什么解决方法吗?
作为记录,我的Dreamhost被设置为使用PHP 5.2.1 FastCGI。
我对Dreamhost的经验很少,但是您可以改用mod_xsendilfe (如果Dreamhost允许)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.