• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP对文件进行加锁、解锁操作的方法

php 搞代码 3年前 (2022-01-22) 18次浏览 已收录 0个评论

在项目中,一般都用到日志,如数据库查询日志、访问日志、对外接口请求返回参数日志,本文主要和大家绍了PHP实现对文件锁进行加锁、解锁操作的方法,结合实例形式分析了PHP针对文件进行加锁、解锁操作的功能、实现方法与相关注意事项,需要的朋友可以参考下,希望能帮助到大家。

$file = 'log.txt';$fp = fopen($file, 'a+');if(!is_writable($file)){  die("The $file is not writable!");}fwrite($fp, 'here');fclose($fp);

但这种写法是由瑕疵的,一个网站同一时间并不是只有一个用户访问的,在多个用户同时访问时,就会出现问题,也就是多个进程使用同一个资源时,前一个进程写到一半后面的进程便开始写了,因此最后生成的日志就乱了。这种情况下,就用到锁了,在文件加锁期间,其他进程是不会修改文件的,只有当文件解锁时,才可以操作。写法如下

$file = 'log.txt';$fp = fopen($file, 'a+');if(!is_writable($file)){  exit("The $file is not writable!");}flock($fp, LOCK_EX);// 加锁fwrite($fp, 'here');flock($fp, LOCK_UN);// 解锁fclose($fp);

如果想测试下在文件加锁期间其他进程操作不了文件的例子,可以用下面给出的demo

log.php

$file = 'log.txt';$fp = fopen($file, 'a+')<em>/本2文来源[email protected]搞@^&代*@码2网</em><strong>搞gaodaima代码</strong>;if(!is_writable($file)){  exit("The $file is not writable!");}flock($fp, LOCK_EX);fwrite($fp, 'here');sleep(10);flock($fp, LOCK_UN);fclose($fp);

test.php

$file = 'lock.txt';$fp = fopen($file, 'a');fwrite($fp, 'good'); // 在sleep期间写不进去fclose($fp);// 或是直接使用下面的这个例子,发现在sleep期间打印是个空值//var_dump(file_get_contents($file));

测试时,先运行log.php,再运行test.php,会发现在sleep期间,test.php是执行达不到效果的。

相关推荐:

PHP通过加锁实现并发抢购功能

实现MySQL语句加锁的方法

Mysql高并发加锁事务处理

以上就是PHP对文件进行加锁、解锁操作的方法的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP对文件进行加锁、解锁操作的方法
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址