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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 针对并发环境下网站、日志文件写入产生的脏数据、更新丢失等情况的解决思路之一

//---并发下日志写入方案
$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);
}
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
17天前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
1月前
|
监控 物联网 数据挖掘
php的应用场景
【8月更文挑战第4天】php的应用场景
54 5
|
10天前
|
PHP
PHP全自动采集在线高清壁纸网站源码
PHP全自动采集在线高清壁纸网站源码,PHP全自动采集在线高清壁纸网站源码,一款开源壁纸源码,无需安装。集合360壁纸,百度壁纸,必应壁纸,简单方便。每天自动采集,自动更新,非常不错,php源码 网站源码 免费源码 自动采集。
23 3
|
10天前
|
PHP 数据库
2024表白墙PHP网站源码
2024表白墙PHP网站源码
23 1
|
20天前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
20天前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
30天前
|
SQL 数据采集 JSON
使用对比!SLS 数据加工 SPL 与旧版 DSL 场景对照
本文讨论在不同的数据处理需求中,新版数据加工 SPL 与旧版数据加工 DSL 的使用对照。
|
13天前
|
前端开发 关系型数据库 MySQL
最新黑名单查询录入系统PHP网站源码
最新黑名单查询录入系统PHP网站源码 前端html 后端layui 操作部分都采用API接口的方式实线 集结了layui表格的多数据操作,添加,批量删除,分页,单项删除 后台数据修改采用绑定参数的形式来进行修改可以很好的预防数据库注入,当然如果你想要测试这个防注入的你也可以尝试一下 PHP版本70+ 数据库Mysql 5.6 上传程序访问 http://你的域名/install 安装
34 0
|
14天前
|
前端开发 安全 JavaScript
PHP与现代Web开发:探索PHP在构建动态网站中的角色和优势
【8月更文挑战第29天】 在数字时代的浪潮下,PHP以其独特的灵活性、易用性以及强大的社区支持,持续成为Web开发领域的重要力量。本文将深入探讨PHP如何适应现代Web开发的需求,通过具体示例揭示PHP的实际应用,并分析其在面对新兴技术挑战时的应对策略。我们将一探究竟,PHP如何在众多编程语言中脱颖而出,成为许多开发者和企业的首选。
|
17天前
|
网络安全
【Azure Service Bus】启用诊断日志来获取客户端访问Azure Service Bus的IP地址 [2024-03-26 实验结果失败]
【Azure Service Bus】启用诊断日志来获取客户端访问Azure Service Bus的IP地址 [2024-03-26 实验结果失败]