0

0

php源码读取大文件超时_调高maxexecutiontime与分块读取【技巧】

蓮花仙者

蓮花仙者

发布时间:2026-02-19 19:37:46

|

694人浏览过

|

来源于php中文网

原创

不一定有效。单纯调高max_execution_time无法解决file_get_contents()一次性加载大文件导致的内存耗尽问题,应采用fopen()+fread()流式分块读取,控制单次读取8kb–64kb,及时处理数据并关闭文件指针。

php源码读取大文件超时_调高maxexecutiontime与分块读取【技巧】

PHP读取大文件时脚本超时,max_execution_time调高就一定有效?

不一定。单纯增大 max_execution_time 只是“拖时间”,不解决根本问题:PHP默认用 file_get_contents()file() 一次性把整个文件载入内存,1GB 文件可能直接触发内存耗尽(Fatal error: Allowed memory size exhausted),此时超时设置根本没机会生效。

真正要处理的是「阻塞式加载」和「内存爆炸」两个问题。优先考虑流式分块读取,而非硬扛超时限制。

fopen() + fread() 分块读取大文件的最小安全模式

这是最可控、兼容性最好、内存占用恒定的方式。关键不是“一次读多少”,而是“别让缓冲区失控”。

  • fopen($path, 'rb') 必须加 b 模式,避免 Windows 下换行符干扰二进制内容
  • 单次 fread($fp, $chunk_size) 建议控制在 8192(8KB)到 65536(64KB)之间;超过 1MB 容易在低内存环境引发抖动
  • 每次读完立即处理或写入,不要累积到数组里——$buffer .= fread(...) 是常见内存泄漏源头
  • 记得 fclose($fp),尤其在循环中频繁打开文件时,否则可能快速耗尽系统文件描述符
while (($chunk = fread($fp, 8192)) !== false) {
    // 处理 $chunk,例如写入数据库、计算哈希、转码等
    if (strlen($chunk) === 0) break;
}

stream_set_timeout()set_time_limit(0) 的实际作用边界

这两个函数常被误用:

码上飞
码上飞

码上飞(CodeFlying) 是一款AI自动化开发平台,通过自然语言描述即可自动生成完整应用程序。

下载

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

  • set_time_limit(0) 禁用脚本总执行时间限制,但对 I/O 阻塞(如 NFS 挂载点卡死、网络文件系统延迟)无效;它只计 PHP 用户态 CPU 时间
  • stream_set_timeout($fp, $sec, $usec) 只影响该流后续的 fread()/fgets() 调用,且仅在流处于阻塞模式下生效;如果底层是本地磁盘文件,这个 timeout 几乎不会触发
  • 真正需要 timeout 的场景其实是远程 HTTP 流、socket 连接或挂载的 CIFS/NFS,而不是读取本地 SSD 上的 500MB 日志

大文件读取中容易被忽略的三个细节

这些点不报错,但会导致行为异常或性能断崖式下跌:

  • 文件指针位置错乱:fseek($fp, 0, SEEK_END) 后没 fseek($fp, 0, SEEK_SET) 就直接 fread(),会读不到任何内容
  • 编码陷阱:用 fgets() 读文本时,若文件含 BOM 或混合编码(如 GBK + UTF-8),strlen() 计算长度会失准,建议统一用 fread() + 显式编码检测
  • opcache 干预:某些 PHP 版本(尤其是启用了 opcache.enable_cli=1 的 CLI 环境)会对 file_get_contents() 缓存结果,导致多次调用返回旧内容;分块读取不受此影响

分块读取不是“更慢的妥协”,而是面向真实 I/O 行为的设计选择。超时参数只是兜底,不是主逻辑。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
fclose函数的用法
fclose函数的用法

fclose是一个C语言和C++中的标准库函数,用于关闭一个已经打开的文件,是文件操作中非常重要的一个函数,用于将文件流与底层文件系统分离,释放相关的资源。更多关于fclose函数的相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

340

2023.11.30

fgets在c语言中的用法
fgets在c语言中的用法

本专题整合了c语言中fgets用法介绍,阅读专题下面的文章了解更多详细内容。

17

2025.08.27

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

371

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

339

2023.10.25

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1184

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1150

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

820

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

460

2023.08.02

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

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

660

2026.02.13

热门下载

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

精品课程

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

共137课时 | 12.1万人学习

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号