为了账号安全,请及时绑定邮箱和手机立即绑定

php多进程读写同一个文件锁的问题

标签:
PHP

PHP是原生支持多进程编程的,可以利用pcntl_fork()在当前位置产生一个子进程,那么就可能存在多个进程读写同一个文件的问题,比如多进程程序读写同一个日志文件,这样就有必要解决读写同一个文件时加锁的问题,php已经内置了一个读写的文件锁方法flock,,官方的解释是轻便的文件咨询锁定,这很官方。

还是先看一个栗子吧:

[php] view plain copy 在CODE上查看代码片派生到我的代码片

  1. <?php  

  2.   

  3. $fp = fopen("logs/app.log""a+");  

  4.   

  5. if (flock($fp, LOCK_EX)) {  // 进行排它型锁定  

  6.     fwrite($fp"Write something here\n");  

  7.     fflush($fp);            // flush output before releasing the lock  

  8.     flock($fp, LOCK_UN);    // 释放锁定  

  9. else {  

  10.     echo "文件正在被其他程序占用";  

  11. }  

  12.   

  13. fclose($fp);  

  14.   

  15. ?>   


flock的第一个参数是一个文件句柄,第二个参数可以设置锁定方式,有几个常量可以设置,下面一一介绍。


LOCK_SH : 取得共享锁定(读取的程序)也就是常说的共享锁,该进程只能读不能写,其他进程还是能读取该文件的。

LOCK_EX:取得独占锁定(写入的程序)常说的独占锁,该进程能读写该文件,其他进程则不能读写。

LOCK_UN:释放锁定(无论共享或独占)也就是释放上述两种锁。

LOCK_NB:配合LOCK_SH和LOCK_EX使用,使得在加锁时程序非阻塞。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消