当前位置: 首页 > 知识库问答 >
问题:

php的file\u get\u内容是否忽略了文件锁定?

宦正诚
2023-03-14

我已经阅读了php的手册页面上的file_get_contents函数,它没有说明任何关于如何file_get_contents行为关于php的文件锁定。然而,在评论部分,用户克里斯建议

file_get_内容通常不考虑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和文件锁定。

正在读取包含文件\u get\u内容()的锁定文件

这是在文件被锁定和修改时读取文件的最糟糕的方法之一,因为:
-file_get_contents()将返回一个空字符串(如")
-filesize()将返回写入文件的实际字节数

我这个说法正确吗?我运行一些测试,锁定一个文件专门和不断写入它,而使用file_get_contents在另一个php进程中读取文件,并没有经历如上所述的行为

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

php的file\u get\u contents通常不关心建议文件锁定,这是真的吗。此外,我是否正确地假设,在网页中对文件“get\u contents”返回的空字符串的声明为空“”,仅当文件为空时,或临时为空(在修改时),但通常不为空(仅因为文件为flock()ed)?

共有1个答案

黄沈浪
2023-03-14

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

但是在这方面是的,file\u get\u contents确实没有内置的方式来获取读取文件时的读取锁定。因此,解决办法将是一条出路。

file\u put\u contents允许您获得写入锁定。

 类似资料:
  • PHP/Apache2中的文件获取内容是从Facebook获取用户图片。直到最近,它一直运转良好。现在,它总是在一分钟后超时,在我的Apache2 error.log中有以下错误: PHP警告:文件\u获取\u内容(https://graph.facebook.com/999999999/picture?width=200):无法打开流:连接超时 下面是代码(我最近添加了$context以查看它是

  • 本文向大家介绍Git 检查文件是否被忽略,包括了Git 检查文件是否被忽略的使用技巧和注意事项,需要的朋友参考一下 示例 该git check-ignore命令报告Git忽略的文件。 您可以在命令行上传递文件名,git check-ignore并将列出被忽略的文件名。例如: 在此,.gitignore中仅定义了* .o文件,因此Readme.md未在.git的输出中列出git check-igno

  • 我正在使用php执行一个远程url,使用文件内容。如果file_get_contents检索到的内容不是空的,那么我会回显一条消息,说是complete。 然而,远程网址有时可能需要一点时间来加载,因为这整个PHP页面需要很长时间来加载。当它完成时,显示结果为完成或错误 谢谢

  • 我正在尝试使用tomcat设置kerberos/spnego身份验证。我在tomcat目录下添加了一个krb5.conf文件,在SpnegoFilterConfig中读取值并设置java.security.krb5.conf,但是似乎没有考虑到这一点。无论文件是否存在,我都会得到相同的结果。 如果我把jce安全文件放在lib/security中,我会得到 然而,无论我是否拥有krb5.conf,这

  • 虽然这不是一个直接的开发问题,但它确实与一个开发工具有关,这与我的开发工作非常相关: 当我在 VSCode (CTRL P) 中搜索文件时,我发现它不包含作为 .gitignore 文件一部分的文件和文件夹。 我可以很好地理解其中的逻辑,这很好,但我如何禁用它(默认设置?)行为也就是说,我确实希望这个搜索包括项目中的所有文件,而不管是.gitignore文件(还是其他任何忽略文件)。

  • 非常简单的一个,我只是想在fOpen或File_Put_Content中添加一个超时。 等待时间太长,此文件正在本地写入文件,如果无法访问或写入该文件,则需要立即发出错误消息,而不是在30秒后。 我试过了 PHP文件内部: 尝试了以下代码: 除了写一个If语句,从X秒开始倒计时,然后Rest一下退出循环之外,我已经没有什么想法了。 我只想创建一个包含一些内容的文本文件,如果它无法在几秒钟内写出该文