PHP cURL下载图片损坏问题:Content-Length异常致文件大小不符
解决cURL下载图片因Content-Length异常导致文件损坏的问题
我之前也碰到过一模一样的情况——服务器返回的Content-Length不准确,导致cURL截断了下载的文件,最终损坏没法打开。咱们来一步步解决:
问题根源
服务器返回的Content-Length头值比实际图片的字节数要小,cURL默认会严格按照这个长度来终止下载,所以最终得到的文件比浏览器手动保存的少了35字节,自然无法被识别为有效图片。
解决办法
1. 让cURL忽略错误的Content-Length
直接在cURL命令里加上--ignore-content-length参数,强制cURL根据实际接收到的字节流完成下载,而不是依赖服务器返回的错误长度:
curl --ignore-content-length https://cdni.rt.com/deutsch/images/2018.04/article/5ac34e500d0403503d8b4568.jpg -o downloaded_image.jpg
2. 验证下载结果
- Linux/macOS下用命令查看文件大小:
ls -l downloaded_image.jpg - Windows直接右键查看文件属性,确认大小和浏览器手动保存的139,880字节一致,然后打开图片检查是否正常显示。
3. 额外排查:检查服务器传输模式
可以先查看服务器的响应头,确认是否同时返回了冲突的传输标识:
curl -I https://cdni.rt.com/deutsch/images/2018.04/article/5ac34e500d0403503d8b4568.jpg
如果输出里同时出现Transfer-Encoding: chunked和Content-Length,那就是服务器配置错误(这两个头不能同时存在),这时候用--ignore-content-length就能完美规避这个问题。
内容的提问来源于stack exchange,提问作者Atef
相关产品推荐
相关产品推荐

