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 小时前
第27天 安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
android·安全·php
edisao1 小时前
四。SpaceX、网络化与未来的跨越:低成本、高频次的真正威胁
大数据·开发语言·人工智能·科技·php
小小代码狗2 小时前
PHP伪协议和文件包含
网络·网络安全·php
qq_406176142 小时前
深耕JS防抖与节流:从原理到工程化实践的全方位指南
开发语言·php
吉吉613 小时前
在 Windows 和 Linux 的 VSCode 中配置 PHP Debug
开发语言·php
catchadmin4 小时前
PHP 8.5 闭包和一等可调用对象进入常量表达式
php
JaguarJack4 小时前
2026 年 PHP 函数式编程 优势与实际应用
后端·php·服务端
zorro_z4 小时前
ThinkPHP8学习篇(十五):验证
php
wr2005144 小时前
渗透笔记和疑惑
开发语言·php
Y_cheng_4 小时前
php环境配置与伪协议
开发语言·php