php的file_get_contents是否忽略文件锁定?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php的file_get_contents是否忽略文件锁定?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1674字,纯文字阅读大概需要3分钟。
内容图文
我已经在’file_get_contents’函数上阅读了php的manual page,该函数没有说明有关’file_get_contents’相对于php文件锁定的行为.但是,在评论部分,用户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.作为开发人员,您需要在需要锁定的所有地方检查/使用群集.
但是是的,在这方面,file_get_contents确实没有内置方法来在读取文件时获取读取锁定.因此,解决方法将是必经之路.
file_put_contents允许您获得写入锁定.
内容总结
以上是互联网集市为您收集整理的php的file_get_contents是否忽略文件锁定?全部内容,希望文章能够帮你解决php的file_get_contents是否忽略文件锁定?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。