php的file_get_contents是否忽略文件锁定?

2024-01-02

我读过 php 的手册页 http://php.net/manual/en/function.file-get-contents.php#120389关于“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 中读取锁定的文件” https://ivopetkov.com/b/reading-locked-files-in-php/,其声称以下内容file_get_contents和文件锁定。

使用 file_get_contents() 读取锁定的文件

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

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

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

一般来说,php 是这样吗?file_get_contents不关心咨询文件锁定。 另外,我是否正确地假设 file_get_contents 返回的空字符串的网页中提出的声明为空“”,仅当文件为空或暂时为空(修改时)但通常不为空(仅适用于该文件的原因flock()ed)?


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

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

file_put_contents不过,允许您获得写入锁。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php的file_get_contents是否忽略文件锁定? 的相关文章

随机推荐

  • 通过 XPath 在任意深度选择 XML 节点

    拥有一个 XML 文档 我想要获取具有特定名称的第一个节点 无论它包含在哪个嵌套深度中 我尝试了几件事但没有成功 var node1 doc SelectSingleNode Shortcut var node2 doc SelectSin
  • 如何将 PickedFile 类型的设置图像保存到 Flutter 中的图像?

    我想设置从相机获取图像并将其设置为以下代码 image DecorationImage image FileImage file 所以我这样做了 File file await ImagePicker pickImage source Im
  • 如何在 PHP 中实现推送通知

    我使用 ajax 已经有一段时间了 我用它做了很多漂亮的工作 但是我最近的挑战是推送通知 我想实现一个站点 不需要每个时间段都调用服务器 而是仅当特定数据库字段有更新时才调用服务器 并且我想在PHP javascript 和 或 jquer
  • 在 ColdFusion 中以编程方式验证邮件服务器连接

    我正在使用自定义 SMTP 服务器 并且希望在用户输入自己的服务器凭据时验证连接 与 Adob e CF 和 Railo 在添加邮件服务器时允许执行的检查类型完全相同 当然 这并不能保证delivery将会工作 但至少要检查输入的服务器 用
  • socket.io 是否重新连接重新运行连接?

    我构建了一个简单的 Web 应用程序 它使用 socket io 通过 Node js 服务器进行一些通信 当用户连接时 节点会传回信息 告诉客户端订阅某些事件 效果很好 但是 如果您让浏览器处于空闲状态 客户端最终会订阅事件两次 订阅过程
  • int 到 double 的无效转换异常

    也许我疯了 但我认为这是一个有效的演员阵容 new int 1 2 3 4 5 Cast
  • Silverstripe 的 Coda 语法高亮显示

    我刚刚搬到一台新机器上 在我的旧机器上 我有 Silverstripe 模板 ss 文件 遵循 Coda 中的 HTML 语法突出显示 我一辈子都不记得我是如何打开它的 不过我记得这是我自己做的 谷歌没有找到任何结果 有什么建议么 更新 真
  • “在 SPARK Ada 中接受挑战”- 后置条件下的总和鬼函数有意外行为

    我正在 SPARK Ada 中编写一个软件 它需要后置条件来验证函数返回值是否等于数组的求和值 在证明函数所在的文件后 我不断收到一个错误 该错误并没有完全加起来 没有双关语的意图 我将发布代码的屏幕截图以便更好地查看 大小为 10 的数组
  • 如何使用 Perl 搜索文件中两个时间戳之间的行?

    在 Perl 中 我尝试读取日志文件 并且仅打印在两个特定时间之间具有时间戳的行 时间格式为 hh mm ss 并且这始终是每个日志上的第三个值 例如 我将搜索介于 12 52 33 到 12 59 33 之间的行 我是 Perl 新手 不
  • 将多个字符串传递给 string::find 函数

    是否可以以某种方式将多个字符串传递给 string find 函数 例如 要查找字符串 我可以使用以下命令 str find a string 我想做的是这样的 str find a string another string yet an
  • 验证元素在量角器中消失

    出于等待目的 我使用这种等待函数 browser wait function return browser isElementPresent by repeater recentName in recentNames row 0 10000
  • 为什么 Kotlin 的 null 安全性不能与局部变量初始化器一起正常工作?

    请看这段代码 fun localVarNullSafety1 var number Double 3 0 val sum 2 0 number does not compile Type mismatch inferred type is
  • 发送JSON数据Servlet Applet通信示例

    您好 我正在开发一个应用程序 其中 servlet 必须将数据 来自数据库 发送到小程序 我已经休养了这个link https stackoverflow com questions 6769255 applet servlet commu
  • 数据表分页不起作用?

    我的 html 页面包含一个表格 我使用 dataTable 插件进行分页 1 https i stack imgur com O2C1e png 1 https i stack imgur com O2C1e pnghttps datat
  • 在 cython 中使用 typedef'd 结构

    我在头文件 dcm h 中有以下定义 typedef struct double alpha double gamma double tau ThetaDCM 我想将它导入到 cython 中 所以我有 cdef extern from d
  • 如何将 Object.values 与打字稿一起使用?

    我正在尝试从对象中形成逗号分隔的字符串 const data Ticket 1 pdf 8e6e8255 a6e9 4626 9606 4cd255055f71 pdf Ticket 2 pdf 106c3613 d976 4331 ab0
  • 如何生成WM_SEC.AUTH_SIGNATURE?

    有谁有可以为 Walmart API 生成此标头的 python 代码吗 WM SEC AUTH SIGNATURE 我试图理解 java 示例 但我没有任何运气 因为我没有 Java 经验 如果有人知道需要签名的字符串的格式 我可能可以从
  • iPad ios 8.4 中不会触发窗口 onload 事件

    我面临以下奇怪的问题 功能 当我打开我的网站页面时 该页面包含许多图像并使用 Javascript jQuery 作为客户端功能 单击每个图像时 所有其他图像都会更改其不透明度 并且所选图像会显示 div 包含一些信息和图像的视频 我使用了
  • Android:在自定义适配器中调用 getView() 两次

    我正在将自定义 SimpleCursorAdapter 设置为 ListView 由于某种原因 FriendAdapter 的 getView 会针对数据库中的每个项目调用两次 经过一番调查 我的 contact list xml 中没有w
  • php的file_get_contents是否忽略文件锁定?

    我读过 php 的手册页 http php net manual en function file get contents php 120389关于 file get contents 函数 它没有说明 file get contents