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

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

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

所以又删了

慎用

相关推荐
TG:@yunlaoda360 云老大13 小时前
如何在华为云国际站代理商控制台进行SFS Turbo的基础状态核查?
大数据·服务器·华为云·php
韩立学长16 小时前
【开题答辩实录分享】以《学生心理预防监控信息系统的设计与实现开题报告》为例进行选题答辩实录分享
mysql·php
zzoood16 小时前
【PHP】富文本编辑器图片自动追加域名
开发语言·php
catchadmin16 小时前
PHP 初学者指南 基础结构与常见错误
php
是娇娇公主~19 小时前
TCP拥塞控制
网络协议·tcp/ip·php
ICT技术最前线19 小时前
路由策略优化基本思路和方法
开发语言·php
lxp19974119 小时前
PHP框架自带队列--更新中
开发语言·php
JienDa20 小时前
PHP 静态分析工具实战:PHPStan 和 Psalm 完全指南
开发语言·php
CHINAHEAO20 小时前
Bagisto修复php弃用警告,看着难受
开发语言·php
晚风吹人醒.21 小时前
LAMP(Linux+Apache+MySQL+PHP)完整搭建过程
linux·服务器·mysql·centos·php·apache·lamp