栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

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

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

还是先看一个栗子吧:

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

  1.   

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

  3.   

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

  5.     fwrite($fp, "Write something heren");  

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

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

  8. } else {  

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

  10. }  

  11.   

  12. fclose($fp);  

  13.   

  14. ?>   


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


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

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

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

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/228126.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号