You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下PHP读取被file_put_contents写入的文件的内容状态问题

Linux环境下PHP读写大文件的冲突结果分析

默认无锁场景

当使用file_put_contents默认参数写入大文件时,它会先截断目标文件为0字节,再逐步写入新内容——这个过程是非原子的。
如果读取操作发生在写入开始后的500毫秒(此时写入尚未完成),你会读取到当前已写入的部分不完整内容:旧文件已经被截断清空,完整的新文件还未生成,只能拿到写入到一半的数据。

带排他锁的场景

如果写入脚本给file_put_contents加上了LOCK_EX标志(即file_put_contents($file, $data, LOCK_EX)),写入期间会给文件加排他锁。此时读取操作会被阻塞,直到1000毫秒的写入操作完成,最终读到的是完整的新文件。

额外说明

如果写入逻辑采用「先写临时文件,完成后rename到目标文件」的方式,Linux下的rename操作是原子性的,这时候读取只会拿到完整的旧文件或完整的新文件,不会出现部分内容的情况——但这不属于你问题中直接用file_put_contents更新原文件的场景。

内容的提问来源于stack exchange,提问作者user999684

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:54:56