【问题标题】:PHP - Check if a remote file is being writtenPHP - 检查是否正在写入远程文件
【发布时间】:2014-06-04 19:14:59
【问题描述】:

我有以下情况: 名为“A”的远程进程将文件发送到 FTP 服务器。 一个名为“B”的远程进程读取FTP服务器中进程“A”发送的文件并做一些事情。

如果进程“B”读取文件正在由进程“A”写入,这种情况说明了潜在的并发问题。

我需要在 PHP 中开发进程“B”。我可以检查文件是否正在写入吗?但如果不是……您有什么替代方案?

编辑 进程 A 不在我的控制之下。

【问题讨论】:

  • 认为你可以检查年龄:stackoverflow.com/questions/8540858/…
  • 这听起来像是一个基于文件系统的问题。本质上,如果有一个写文件句柄打开,你不希望 B 能够打开一个文件句柄。
  • @cale_b 你知道什么时候设置的吗?文件系统是在写入完成后执行此操作,还是在写入时执行此操作?
  • 您控制 A 发送的内容吗?有没有办法让你表示“这是 100% 确定这个文件的结尾”?

标签: php ftp


【解决方案1】:

您可以检查可能正在写入的文件的文件大小(使用filesize()),休眠 5 秒并再次检查文件大小。 如果它已更改,您就知道该文件仍在写入中。 如果没有,您可以假设文件已上传。

这不是万无一失的,但据我所知,没有其他解决方案可以用 PHP 进行检查。

【讨论】:

  • 这当然不是真的。仅仅因为你让进程休眠,并不意味着正在写入的进程肯定会 100% 运行。
  • @PatrickJamesMcDougle 这绝对是真的。正如我所说,它并非万无一失,但在某些情况下会有所帮助。
【解决方案2】:

假设Process A 在您的控制之下。

假设processA 使用临时名称上传文件。上传完成后Process A 将其重命名。 Process B 只查找真实文件。这样你就不用担心Process B读取的上传文件了

【讨论】:

  • 不,Process A 不在我的控制之下
猜你喜欢
  • 2016-06-26
  • 1970-01-01
  • 2010-10-01
  • 2015-03-16
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多