我是靠谱客的博主 无限皮卡丘,最近开发中收集的这篇文章主要介绍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 heren");  

  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使用,使得在加锁时程序非阻塞。


转载于:https://blog.51cto.com/zhaozhangxiao/1901400

最后

以上就是无限皮卡丘为你收集整理的php多进程读写同一个文件锁的问题的全部内容,希望文章能够帮你解决php多进程读写同一个文件锁的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部