PHP中利用文件锁实现日志写入和网站接口访问等常见场景下的并发控制

Wesley13
• 阅读 592
//---并发下日志写入方案
$fp = fopen('./log/test_log.txt', 'a+');
if (flock($fp, LOCK_EX)) {
     fwrite($fp, '1\n');
     flock($fp, LOCK_UN);
  }
fclose($fp);        

//---接口并发控制示例   这个只是测试案例,可以将锁的粒度按照一定维度或者标识往下切割到更细来提高性能
public function test()
  {
    $id = $_REQUEST['id'];

    $fp = fopen('./test_log.txt', 'r');
    
    //打开后给被访问的文件施加排他锁(阻塞模式) 用以阻塞执行代码期间 其它进程对这个文件的访问 让其它进程处于等待状态
    if (flock($fp, LOCK_EX)) { //如果需要非阻塞模式可以用 LOCK_EX | LOCK_NB
        //以下进行业务逻辑的处理
        $list = M("test")->where("id={$id}")->find();
        
        if ($list && $list['status'] < 1) {
                $add_data['test_id'] = $id;
                $add_data['time'] = $_SERVER['REQUEST_TIME'];
                $add_rus = M("test_log")->add($add_data);
                if ($add_rus) {
                    $save_data['id'] = $id;
                    $save_data['status'] = 1;
                    $up_rus = M('test')->save($save_data);
                }
        }
        //以上进行业务逻辑的处理

        flock($fp, LOCK_UN);//记得解锁,PHP5.3.2以后的版本不再在调用fclose的时候自动解锁
    }

    fclose($fp);
}
点赞
收藏
评论区
推荐文章
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
springboot学习(四) 日志管理
1、简介  SpringBoot内部日志系统使用的是CommonsLogging,但开放底层的日志实现。默认为会JavaUtilLogging,Log4J,Log4J2和Logback提供配置。每种情况下都会预先配置使用控制台输出,也可以使用可选的文件输出。 2、日志格式  默认的日志输出格式为:1201
PHP写入日志文件
/写入文件$paytype文件名$content内容(string类型)/publicstaticfunctiondingdinglog($paytype,$content)$filename$SERVER'DOCUMENTROOT'.'/log/';$filename$filename.$paytype.
Wesley13 Wesley13
3年前
ThinkPHP 5.0.x 反序列化漏洞 PoC
因为写入的文件名包含特殊符号,所以该漏洞只能在Linux中写入webshell,不能在Windows系统写入。这个漏洞的重点在于体会ThinkPHP的反序列化利用链。演示环境:Kali、ThinkPHP/5.0.24演示代码:application/index/controller/Index.php<?p
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日志体系(六)log4j2
1.1简介            !(https://oscimg.oschina.net/oscnet/495f965815e196a8e347514c4408c5ca35d.png)log4j2,一个日志的实现框架,是log4j的升级版本,于2014年7月正式亮相。与第一代log4j不同,log4j2完全重写了log4j的日志实现,
Stella981 Stella981
3年前
LoggerOne
LoggerOne一个高效、简约、灵活高性能的遵循PSR3的PHP日志类库实现。特性天然的缓存特性(Logger实例属性),延迟批量写入。安装&使用Install$ composer require loggerone/loggerone默认的调用方式在默认情况下,Log
3A网络 3A网络
2年前
如何高效查看 Docker 日志
如何高效查看Docker日志开发基于Docker的应用时,用好log可以大大提高排错效率,下面就是几个常用的log操作技巧:显示所有log显示实时log使用tail查看log尾部使用grep过滤log根据时间查看log组合使用把日志写入文件1.显示所有logjavascript显示某个容器的所有log$
赵颜 赵颜
10个月前
生物识别应用中指纹挂锁方案描述
方案概述指纹挂锁方案采用ACH512或ACM32FP4指纹芯片和88112传感器,指纹识别速度快,BOM成本低,非常适合挂锁、内门锁、箱包锁、箱柜锁等场景。方案特点•主控算法单芯片:ACH512或ACM32FP4•传感器分辨率:88112点阵(推荐)•指
赵颜 赵颜
7个月前
指纹挂锁方案——采用ACH512或ACM32FP4指纹芯片和88*112传感器,指纹识别速度快,BOM成本低
方案概述指纹挂锁方案采用ACH512或ACM32FP4指纹芯片和88112传感器,指纹识别速度快,BOM成本低,非常适合挂锁、内门锁、箱包锁、箱柜锁等场景。方案特点•主控算法单芯片:ACH512或ACM32FP4•传感器分辨率:88112点阵(推荐)•指