php按顺序读取文件,文件读写顺序问题

博客探讨了PHP中文件读写操作的顺序问题,由于文件状态缓存导致实际执行顺序与预期不符。通过示例代码展示了即使更改锁类型,读写顺序仍然不按预期进行。解决方法是使用clearstatcache()函数清除文件状态缓存,以确保读写顺序正确。
摘要由CSDN通过智能技术生成

实际执行之后的结果:

r1: |w1: 745|r2: |w2: 404|r3: |

根据结果发现,执行顺序和PHP语句的顺序不同,

实际上的顺序是“r1 -> r2 -> r3 -> w1 -> w2”。

我试过把读文件所加的锁LOCK_SH改成LOCK_EX,结果还是和上面的顺序一样。

怎样才能让读写顺序符合语句顺序“r1 -> w1 -> r2 -> w2 -> r3”来执行?

回复讨论(解决方案)

真正的原因是文件状态缓存造成 filesize($filename) 始终为 0function read($filename) { $fp = fopen($filename, 'rb'); flock($fp, LOCK_SH); clearstatcache(); //清除文件状态缓存 $data = @fread($fp, @filesize($filename)); fclose($fp); return $data;}function write($filename, $data) { $fp = fopen($filename, 'ab'); flock($fp, LOCK_EX); fwrite($fp, $data); fclose($fp); return $data;//mt_rand(1, 999);} $file = './wr.txt'; //原文件是空的file_put_contents($file, ''); //清空源文件echo 'r1: ', read($file), '|

';echo 'w1: ', write($file, 'a'), '|

';echo 'r2: ', read($file), '|

';echo 'w2: ', write($file, 'b'), '|

';echo 'r3: ', read($file), '|

';readfile($file); //显示一下r1: |

w1: a|

r2: a|

w2: b|

r3: ab|

ab

clearstatcache -- 清除文件状态缓存

本函数缓存特定文件名的信息,因此只在对同一个文件名进行多次操作并且需要该文件信息不被缓存时才需要调用 clearstatcache()。

受影响的函数包括 stat(),lstat(),file_exists(),is_writable(),is_readable(),is_executable(),is_file(),is_dir(),is_link(),filectime(),fileatime(),filemtime(),fileinode(),filegroup(),fileowner(), filesize(),filetype() 和 fileperms()。

明白了,原来是缓存的缘故。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值