Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

function_cache.php文件的function writetocache函数有严重BUG:

[复制链接]
jiangchuankyo 发表于 2021-1-25 10:56:25 | 显示全部楼层 |阅读模式
function_cache.php文件的function writetocache函数有严重BUG:
fwrite写文件前没有flock进行加锁,

在同一秒内多个访问者同时访问时如果有2个或2个以上的访问都同时触发了写入文件的话,


会有很大概率造成写入的文件数据混乱.

如果你的论坛每天访问量很小的话, 有可能10年、20年都不会遇到一次, 但如果访问量比较大的话,

有可能经常都会出现, BUG出现后就会在页面顶部显示一些奇怪的多出来的代码:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| jiangchuankyo 发表于 2021-1-25 11:03:36 | 显示全部楼层
本帖最后由 jiangchuankyo 于 2021-1-25 11:08 编辑



上面文件是php文件, 本身在第一个?时就应该文件结束的,

不只是fwrite写入时没加锁, 不止function_cache.php这一处, 还是其它文件内的fwrite也都会有该问题,
还有很多file_put_contents同样也未加锁, 估计也会遇到问题,
因为在以前经常浏览器顶部出现一些奇怪的代码, 最后才定位出是由于文件写入后代码多余了, 然后网上查找原因,

才得出是因为写文件时未加锁, 然后多个访问同时触发了写入操作, 最后我改了代码加了锁, BUG再没出现


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

老周部落 发表于 2021-1-25 15:04:13 | 显示全部楼层
感谢您的回报,后续会对这块做优化。
回复

使用道具 举报

cornersoft 发表于 2021-1-28 18:27:05 | 显示全部楼层
老周部落 发表于 2021-1-25 15:04
感谢您的回报,后续会对这块做优化。

印象里cache文件不都是后台生成的么?同一时间有一大群人同时在后台刷新缓存不太可能的吧
回复

使用道具 举报

老周部落 发表于 2021-1-28 21:17:06 | 显示全部楼层
cornersoft 发表于 2021-1-28 18:27
印象里cache文件不都是后台生成的么?同一时间有一大群人同时在后台刷新缓存不太可能的吧

前台也有大量的缓存操作点的,具体系统内搜索对 updatecache 函数的调用就知道了。
锁肯定是要加,但是具体怎么加需要再讨论一下的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-4-19 22:13 , Processed in 0.437448 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表