flock时写文件锁.如果加锁失败,表示这个锁正在被使用,无法被重复加锁,如果解锁失败,说明进程没有处理完
对于PHP的锁,其实并没有什么太多的概念.抛弃一些第三方的依赖,看看有哪些可用的选择.
目前可以想到的就这么多,在该项目中我们采用文件锁,因为其它的两个需要装扩展.文件锁的逻辑就非常简单了
从网上摘抄了一个例子,使用的 eAccelerator 和 文件锁两种 传送门
使用方法
问题在于,flock()这个函数不好使.
这是由PHP先天决定的.
用户A访问你的程序后,PHP在服务器端会启动一个线程,flock这个函数只能在当前线程中锁住这个文件.
同时,如果有另外的用户B也访问了这个程序,PHP会再启动一个线程 ,flock只对B的线程起作用.A和B之间互不影响.A此时,A线程对文件的锁定不影响 B对文件的操作!
有个
一般文件锁在解决少量并发的时候是起作用的.
比如:处理库存的时候作一个标记位, 还有定时任务计划的时候,避免重复.
首先,这个问题只有在特殊情况下才算是问题,大多数情况下可以不作考虑.
然后,这是问题很难描述清楚,解决方案有多种,下面提供一种较方便易用的方式
场景(问题)描述如下:
0,用户A、B同时打开一个页面,页面显示,客户表T_CUSTOMER字段(C_NAME、C_AGE)
①.,A 将姓名"张三"改为"张三1",然后保存
这样A的操作就被覆盖了,姓名又变回"张三"了,大家一般怎么处处这种情况?
这里给出一个较易用的解决方案
给表添加一字段:LAST_UPDATE,即最后更新时间
回放场景
0,用户A、B同时打开一页面,面页显示:
下面要做的就是给出提示了:喔哟,此信息在你发呆这段时间已被人改过啦,所以你需要返工.
触发器代码如下:
===================================================
CREATE OR REPLACE TRIGGER T_CUSTOMER
BEFORE UPDATE ON T_CUSTOMER
FOR EACH ROW
/*
记录最后修改时间
*/
BEGIN
:NEW.LAST_UPDATE := SYSDATE;
END;
如果触发器不熟悉或者只是不喜欢用触发器,完全可以修改记录时同时给LAST_UPDATE字段赋值,以此替代触发器的作用.
以上就是土嘎嘎小编为大家整理的php文件锁会失效吗,PHP相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!