file_put_contents锁的问题

记一次线上生产file_put_contents锁的问题

php项目,很多地方加了日志记录,方法为

function logstr($name='log',$str="",$type="Ymd"){
    $file = date("$type").'_'.$name.'.log';
    $add = __DIR__.'/../runtime/cuslog/'.date("Ym").'/';
    if(!is_dir($add)){
        mkdir(iconv("UTF-8", "GBK", $add),0777,true);
    }
    $file  = $add.$file;
    $content=[
        'name'=>$name,
        'premsg'=>'',
        'time'=> date('Y-m-d H:i:s'),
        'content'=>$str
    ];

    file_put_contents($file, json_encode($content,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES).PHP_EOL,FILE_APPEND);
}

忽然有天查日志,发现日志有丢失问题,在并发情况下,有些日志没有没记录下来

所以加了下锁 LOCK_EX

变为

file_put_contents($file, json_encode($content,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES).PHP_EOL,FILE_APPEND|LOCK_EX);

这样的确不会出现丢日志的问题

但问题来了,在并发下,导致接口响应速度极慢

所以又删了

慎用

相关推荐
吱吱鼠叔43 分钟前
MATLAB方程求解:1.线性方程组
开发语言·matlab·php
Messiah___1 小时前
【论文阅读】Slim Fly: A Cost Effective Low-Diameter Network Topology 一种经济高效的小直径网络拓扑
开发语言·php
项目題供诗4 小时前
尚品汇-秒杀商品存入缓存、Redis发布订阅实现状态位(五十一)
开发语言·php
蜗牛沐雨5 小时前
用 ReactPHP 实现图片上传加速:让并发上传实现真正的高效
php·reactphp
龙哥·三年风水16 小时前
活动系统开发之采用设计模式与非设计模式的区别-后台功能总结
设计模式·php·tinkphp6
白总Server18 小时前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php
yukai0800819 小时前
Python 全栈系列271 微服务踩坑记
python·微服务·php
向宇it20 小时前
一张图解析FastAdmin中的弹出窗口的功能(备份)
php·fastadmin
最美不过下雨天啊21 小时前
php curl发送get、post请求
php
极术社区1 天前
ResNeXt学习
开发语言·学习·计算机视觉·php