我读过php在'file_get_contents‘函数上的file_get_contents,它没有说明'file_get_contents`’在php文件锁定方面的行为。
file_get_contents通常不尊重PHP的群集锁定,即建议锁定。 您可以通过一些额外的代码来解决这个问题,请求共享锁,比如..。
<?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()读取锁定的文件--这是在文件被锁定和修改时读取文件的最糟糕的方法之一,因为:
我这个说法是对的?我运行一些测试,只锁定一个文件并不断地写入它,同时在另一个php进程中使用file_get_contents
读取该文件,并且没有经历过如上所述的行为。
file_get_contents()将返回一个空字符串(如in "")
一般来说,php的file_get_contents
不关心咨询文件的锁定,这是真的吗?另外,我是否正确地假设file_get_contents返回的空字符串的网页中的声明是空的"",只有在文件为空或临时为空(修改时)而不是一般为空(仅因为文件被flock()
编辑)时,才是正确的?
发布于 2018-03-13 18:18:50
flock相对独立于文件操作,您甚至可以在锁定的文件上使用fopen。作为开发人员,您负责检查/使用在任何需要锁的地方。
但是,在这方面,的确,file_get_contents
在读取文件时没有获得读取锁的内置方式。因此,解决办法将是可行的。
不过,file_put_contents
允许您获得一个用于写作的锁。
https://stackoverflow.com/questions/49262971
复制相似问题