首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php的file_get_contents忽略文件锁定吗?

php的file_get_contents忽略文件锁定吗?
EN

Stack Overflow用户
提问于 2018-03-13 18:05:26
回答 1查看 3.6K关注 0票数 7

我读过php在'file_get_contents‘函数上的file_get_contents,它没有说明'file_get_contents`’在php文件锁定方面的行为。

file_get_contents通常不尊重PHP的群集锁定,即建议锁定。 您可以通过一些额外的代码来解决这个问题,请求共享锁,比如..。

代码语言:javascript
运行
复制
<?php
$tmp = fopen($path, 'rb');
@flock($tmp, LOCK_SH);
$contents = file_get_contents($path);
@flock($tmp, LOCK_UN);
fclose($tmp);
?>

我对此进行了成功的检验。我还测试过,即使一个文件已经被flock()专用的LOCK_EX锁定,也有可能让另一个php进程通过file_get_contents读取该文件,就像注释所建议的那样。

然而,这也是我询问信息的主要原因,我阅读了一个名为“读取PHP中的锁定文件”的网页,其中声明了关于file_get_contents和文件锁定的如下内容。

用file_get_contents()读取锁定的文件--这是在文件被锁定和修改时读取文件的最糟糕的方法之一,因为:

  • file_get_contents()将返回一个空字符串(如in "")
  • filesize()将返回写入文件的实际字节数

我这个说法是对的?我运行一些测试,只锁定一个文件并不断地写入它,同时在另一个php进程中使用file_get_contents读取该文件,并且没有经历过如上所述的行为。

file_get_contents()将返回一个空字符串(如in "")

一般来说,php的file_get_contents不关心咨询文件的锁定,这是真的吗?另外,我是否正确地假设file_get_contents返回的空字符串的网页中的声明是空的"",只有在文件为空或临时为空(修改时)而不是一般为空(仅因为文件被flock()编辑)时,才是正确的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-13 18:18:50

flock相对独立于文件操作,您甚至可以在锁定的文件上使用fopen。作为开发人员,您负责检查/使用在任何需要锁的地方。

但是,在这方面,的确,file_get_contents在读取文件时没有获得读取锁的内置方式。因此,解决办法将是可行的。

不过,file_put_contents允许您获得一个用于写作的锁。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49262971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档