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);

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

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

所以又删了

慎用

相关推荐
真正的醒悟1 天前
202503-经验之道
服务器·网络·php
wuxuanok1 天前
ThinkPHP ——安装部署与配置
sql·mysql·nginx·php
霍格沃兹测试学院-小舟畅学1 天前
性能测试入门:使用 Playwright 测量关键 Web 性能指标
开发语言·前端·php
zorro_z1 天前
ThinkPHP8学习篇(十三):视图
php
sc.溯琛1 天前
计算机网络:概论学习1
网络·智能路由器·php
#微爱帮#1 天前
微爱帮监狱写信寄信小程序PHP高并发优化技术方案
服务器·php·apache
_dindong1 天前
Linux网络编程:Reactor反应堆模式
linux·服务器·网络·设计模式·php
霸王大陆1 天前
《零基础学PHP:从入门到实战》教程-模块八:面向对象编程(OOP)入门-5
开发语言·笔记·php·课程设计
霸王大陆1 天前
《零基础学 PHP:从入门到实战》模块十一:成为 PHP 侦探,精通错误处理与调试实战大全-1
开发语言·笔记·php·课程设计
JaguarJack1 天前
如何创建和使用 Shell 脚本实现 PHP 部署自动化
后端·php