0

0

PHP读取文件时连接中断怎么办_PHP读取文件断点续传处理方法【解答】

雪夜

雪夜

发布时间:2026-02-14 18:00:58

|

934人浏览过

|

来源于php中文网

原创

php处理大文件读取中断并实现断点续传有五种方法:一、fopen+fseek分块读取与进度保存;二、curl多段并发+校验合并;三、自定义stream_wrapper注册可恢复流协议;四、session+token管理http层传输状态;五、x-sendfile/x-accel-redirect交由web服务器处理断点。

php读取文件时连接中断怎么办_php读取文件断点续传处理方法【解答】

如果PHP在读取大文件过程中因网络波动、超时或客户端断开连接导致读取中断,则无法完整获取文件内容。以下是处理此类中断并实现断点续传的多种方法:

一、使用fopen配合fseek实现分块读取与断点恢复

该方法通过记录已读取的字节偏移量,在下次请求时从该位置继续读取,避免重复传输和内存溢出。

1、在服务端保存当前读取进度至临时文件或数据库,例如写入offset.txt记录已传输字节数。

2、客户端发起续传请求时,在HTTP头中携带Range字段,如Range: bytes=1024-。

立即学习PHP免费学习笔记(深入)”;

3、PHP脚本解析$_SERVER['HTTP_RANGE'],提取起始偏移量,并用fseek($fp, $start_offset)定位文件指针。

4、调用fread($fp, $chunk_size)分块读取剩余内容,每次读取后更新offset.txt中的值。

5、响应时设置HTTP状态码为206 Partial Content,并添加Content-Range头,例如Content-Range: bytes 1024-9999/10000。

二、基于cURL多段并发请求与本地校验合并

将大文件切分为固定大小的数据块,分别发起独立HTTP请求,各块成功后写入对应临时文件,最后按序合并。

1、服务端提供接口支持按块索引返回数据,例如/api/file/chunk?file_id=abc&index=2。

2、客户端预先计算总块数及每块起止范围,生成任务队列。

3、使用cURL_multi_init并发请求多个块,每个请求设置CURLOPT_TIMEOUT为30秒防止长期挂起。

4、对每个返回的块数据进行MD5校验,若失败则重试三次,仍失败则标记该块为待重传。

5、所有块下载完成后,按index顺序cat或file_put_contents追加写入目标文件。

三、利用stream_wrapper_register注册自定义流处理器

通过注册可中断、可恢复的流协议,使fopen/fread等原生函数自动支持断点逻辑,无需修改业务代码。

1、定义类MyFileStreamWrapper实现StreamWrapper接口,重写stream_open、stream_read等方法。

Zeemo AI
Zeemo AI

一款专业的视频字幕制作和视频处理工具

下载

2、在stream_open中检查是否存在同名.offset文件,若有则读取上次终止位置并设置内部$position变量。

3、stream_read中根据当前$position读取指定长度数据,并实时更新.offset文件内容。

4、调用stream_wrapper_register('resumable', 'MyFileStreamWrapper')注册协议。

5、后续使用fopen('resumable://path/to/file.zip', 'r')即可透明启用断点续传功能。

四、结合session与临时存储实现HTTP层断点控制

利用PHP session保存传输上下文,在请求中断后通过唯一token重新关联会话状态,恢复传输流程。

1、首次请求时生成UUID作为transfer_token,并存入$_SESSION["{$token}_status"] = ['offset' => 0, 'total' => $size]。

2、客户端在每次请求Header中携带Transfer-Token: abc-def-ghi。

3、PHP脚本通过$_SERVER['HTTP_TRANSFER_TOKEN']获取token,从session读取当前offset值。

4、读取文件时跳过已传部分,使用fpassthru输出剩余内容,并在每次输出后更新session中的offset。

5、响应头中返回X-Resume-Offset: 12345,供客户端判断是否需发起下一段请求。

五、使用X-Sendfile或X-Accel-Redirect配合Nginx/Apache断点支持

将实际文件传输交由Web服务器处理,PHP仅负责权限校验与Range头解析,大幅提升稳定性和性能。

1、确保Nginx启用sendfile和add_header Accept-Ranges bytes指令,Apache启用mod_headers与mod_xsendfile模块。

2、PHP验证用户权限后,不直接输出文件内容,而是设置header('X-Accel-Redirect: /protected/file.zip')。

3、Nginx接收到X-Accel-Redirect后,自动识别Range头并执行断点传输,同时忽略PHP进程中断影响。

4、若需记录进度,可在location块中配置log_format包含$http_range变量,写入访问日志供分析。

5、客户端收到206响应且Content-Range正确,说明Web服务器已接管并完成断点逻辑。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

239

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

514

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

565

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

237

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

457

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3585

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

63

2026.01.13

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

23

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号