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

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

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

所以又删了

慎用

相关推荐
Q_Q51100828517 小时前
python+django/flask成都奥科厨具厂产品在线销售系统
vue.js·spring boot·python·django·flask·node.js·php
白熊18819 小时前
【推荐算法】注意力机制与兴趣演化:推荐系统如何抓住用户的心?
算法·php·推荐算法
Q_Q51100828521 小时前
python+django/flask+uniapp宠物中心信息管理系统app
spring boot·python·django·flask·uni-app·node.js·php
hunzi_11 天前
PHP商城源码:构建高效电商平台的利器
开发语言·php
SDL大华1 天前
【备忘】PHP web项目一般部署办法
开发语言·php
kdniao20251 天前
快递接口调用选择:快递鸟、快递100、阿里云大对比
人工智能·阿里云·php
别NULL2 天前
《TCP/IP 详解 卷1:协议》第6章:DHCP和自动配置
网络协议·tcp/ip·php
Le_ee2 天前
pikachu——php反序列化
网络安全·靶场·php·pikachu·php反序列
开开心心就好2 天前
电脑扩展屏幕工具
java·开发语言·前端·电脑·php·excel·batch
AI风老师3 天前
通信网络基础概念
开发语言·网络·php