php 的 file_get_contents 会忽略文件锁定吗?
Does php's file_get_contents ignore file locking?
我已经阅读了php关于'file_get_contents'函数的manual page,它没有说明'file_get_contents`相对于[=38=的行为方式]的文件锁定。然而在评论部分,用户 Chris 建议
file_get_contents does not normally respect PHP's flock locking, i.e.
advisory locking.
You can workaround this with some extra code to request a shared lock,
like...
<?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
读取文件,因为评论会有建议。
然而,这也是我询问信息的主要原因,我阅读了一个名为 "Reading locked files in PHP" 的网页,其中声称以下内容涉及 file_get_contents
和文件锁定。
Reading a locked file with file_get_contents()
This is one the worst way to read a file while it is locked and modified, because:
- file_get_contents() will return an empty string (like in "")
- filesize() will return the actual number of bytes written to the file
我这个说法正确吗?我 运行 进行了一些测试,独占锁定文件并不断写入,同时在另一个 php 进程中使用 file_get_contents
读取文件并且没有遇到如上所述的行为
file_get_contents() will return an empty string (like in "")
一般来说,php 的 file_get_contents
不关心咨询文件锁定是真的吗?
另外,我是否正确地假设网页中关于 file_get_contents 返回的空字符串的声明是空的“”,仅当文件为空或暂时为空(修改时)但通常不为空时才为真(仅出于文件被 flock()
编辑的原因)?
flock相对独立于文件操作,你甚至可以对锁定的文件使用fopen。作为开发人员,您有责任 checking/using 在需要锁的任何地方蜂拥而至。
但是在这方面是的,确实 file_get_contents
在读取文件时没有 build-in 获取读取锁定的方法。所以解决方法就是要走的路。
file_put_contents
允许您获得写入锁。
我已经阅读了php关于'file_get_contents'函数的manual page,它没有说明'file_get_contents`相对于[=38=的行为方式]的文件锁定。然而在评论部分,用户 Chris 建议
file_get_contents does not normally respect PHP's flock locking, i.e. advisory locking.
You can workaround this with some extra code to request a shared lock, like...
<?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
读取文件,因为评论会有建议。
然而,这也是我询问信息的主要原因,我阅读了一个名为 "Reading locked files in PHP" 的网页,其中声称以下内容涉及 file_get_contents
和文件锁定。
Reading a locked file with file_get_contents()
This is one the worst way to read a file while it is locked and modified, because:
- file_get_contents() will return an empty string (like in "")
- filesize() will return the actual number of bytes written to the file
我这个说法正确吗?我 运行 进行了一些测试,独占锁定文件并不断写入,同时在另一个 php 进程中使用 file_get_contents
读取文件并且没有遇到如上所述的行为
file_get_contents() will return an empty string (like in "")
一般来说,php 的 file_get_contents
不关心咨询文件锁定是真的吗?
另外,我是否正确地假设网页中关于 file_get_contents 返回的空字符串的声明是空的“”,仅当文件为空或暂时为空(修改时)但通常不为空时才为真(仅出于文件被 flock()
编辑的原因)?
flock相对独立于文件操作,你甚至可以对锁定的文件使用fopen。作为开发人员,您有责任 checking/using 在需要锁的任何地方蜂拥而至。
但是在这方面是的,确实 file_get_contents
在读取文件时没有 build-in 获取读取锁定的方法。所以解决方法就是要走的路。
file_put_contents
允许您获得写入锁。