PHP使用flock实现文件加锁来防止多进程同时写入文件
admin
2023-06-17 06:21:57
0

lock在官方文档里的解释是:flock() 允许你执行一个简单的可以在任何平台中使用的读取/写入模型(包括大部分的 Unix 派生版和甚至是Windows)。如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),请将可选的第三个参数设置为 TRUE。锁定操作也可以被 fclose() 释放(代码执行完毕时也会自动调用)。

简单来说,就是对一个文件进行锁定操作,使得多进程访问该文件时受到限制,从而防止冲突。举个例子:

说明:

1.这段代码的意思是,以读写方式打开文件test.txt,当一个用户调用该php页面时,即对test.txt文件进行操作,那么就会执行flock($file,LOCK_EX)代码,即将test.txt文件进行独占锁定(该文件只能由该用户进行读写操作),那么如果有其他新的用户想访问该文件,就会被阻塞,直到前者关闭文件(释放锁定)。

2.如果将代码改成flock($file,LOCK_EX+LOCK_NB)表示锁定时直接返回错误,那么如果有新的用户访问该文件,就会输出“Error locking file!”

代码学堂php教程_代码学堂

3.该函数的语法是flock(file,lock,block),其中file必需。规定要锁定或释放的已打开的文件。lock 必需。规定要使用哪种锁定类型。block可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。

例如:请写一段PHP代码,确保多个进程同时写入同一个文件成功

function writeData($path, $mode,$data) 
{ 
  $fp = fopen($path, $mode);  
  $retries = 0; 
  $max_retries = 100;  
  do{ 
    if ($retries > 0)  
    { 
      usleep(rand(1, 10000)); 
    } 
    $retries += 1; 
  }while (!flock($fp, LOCK_EX) and $retries<= $max_retries);  
  if ($retries == $max_retries)  
  { 
    return false; 
  } 
  fwrite($fp, "$data\n"); 
  flock($fp, LOCK_UN); 
  fclose($fp);  
  return true;  
}


相关内容

热门资讯

台官员称岛内高铁延误事故“不排... 【环球网报道】据中时新闻网等台媒5月27日报道,台湾高铁25日因苗栗路段信号异常,导致轨道定位功能消...
国家统计局:1~4月全国规模以... 【大河财立方消息】5月27日,国家统计局发布的数据显示,1—4月份,全国规模以上工业企业实现利润总额...
《给阿嬷的情书》火出圈 在“潮... 电影《给阿嬷的情书》剧照。潮汕宗祠龙形屋檐构件。 河南日报全媒体记者 王佳卉 摄近日,电影《给阿嬷的...
为孤困儿童插上“隐形的翅膀” 在新密市牛店镇参加营会活动的一部分孩子,行走在乡间的田垄上。登山、徒步,跟村民打招呼、拨弄路边的花草...
收麦的时候 想家的时候——“蹲... 豫东平原,麦浪翻涌。5月23日一早,李创业坐上了回老家河南商丘的高铁,看到窗外一望无际的麦田,他说“...
搭好家门口的“就业桥” 5月26日清晨,位于武陟县黄河大道与文化路交叉口的零工市场已是人头攒动,门头的LED大屏滚动播放着最...
烟火气息+中原底蕴 豫篮联赛“... 豫篮联赛吉祥物以东汉瑞兽石辟邪为设计原型。 赛事组委会供图赛场外非遗市集上的面塑。小演员演唱《穆桂英...
豫北小城何以“圈粉”国际大咖 当科幻片中的“意念控物”照进现实,大脑信号便可精准操控康复设备,助力残障患者重启运动能力——前沿的脑...
我国地理信息产业加快打造“空间... 新华社北京5月26日电随着人工智能与地理信息技术深度融合,我国地理信息产业加快打造“空间智能体”,不...