下载文件时总是下载不完整, Content-Length mismatch: Response Header indicated 157,065,016 bytes, but server sent

本文记录了在使用PHP下载远程文件时遇到的Content-Length不匹配问题,详细描述了从检查内存限制、网络连接、获取文件大小方法到采用缓冲区策略的整个排查和解决过程。
摘要由CSDN通过智能技术生成

下载文件时总是下载不完整, Content-Length mismatch: Response Header indicated 157,065,016 bytes, but server sent 145,085,896 bytes.

问题

最近在用php做远程文件的下载,但是下载的时候总是出现下载不完整的情况,比如189M的文件,下载的130M的时候就会出现网络失败的情况,最后抓包工具的日志报错: Content-Length mismatch: Response Header indicated 157,065,016 bytes, but server sent 145,085,896 bytes.
下面记录一下错误的排查过程:

解决过程

1.可能是内存不足
开始以为是内存足导致的,后来加大内存
set_time_limit(0);
set_init(‘memory_limit’,4096);
但是发现并没有什么用,问题仍然存在
2.网络连接
查了nigix配置并没有发现什么有问题的部分,也将请求时间设长问题也一直存在
3.排到第一个问题
因为是读取的远程文件,在读取文件的时候用fliesize()来读取文件的大小,后来发现这个函数是无法读取到远程文件的大小的
后改用get_header()方法来获取文件长度:get_header[‘Content-Length’];
但是至此,问题并没有被完全解决
4.以为文件太大,没有办法一次读入内存,就改为了分行读取
但问题也没有得到解决
5.重新写了新的方法,借鉴了更多方法
至此,在测试时问题得到解决
增加缓冲区清空
完整方法为

public function download($url){
   

	$fileSize = get_header($url
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值