【问题标题】:File can't run while being uploaded simultaneously via FTP通过 FTP 同时上传文件时无法运行
【发布时间】:2011-09-24 14:11:42
【问题描述】:

不确定这是否与服务器相关或正常行为,但我想我会问。我运营着一个流量相对较高的网站(每周 20 万多个独立用户),我们通过包含重定向的 PHP 文件提供大量链接。

唯一的问题是,我需要经常更新这个文件,我是通过 SFTP 完成的。该文件大小约为 800k,下载大约需要一秒钟。但是,用户告诉我,有时通过 PHP 文件重定向的链接不起作用,我意识到只有在通过 SFTP 上传或下载文件时才会发生这种情况。

所以我的问题是:当我通过 FTP 上传文件的新副本时,有什么方法可以让用户保持文件可执行?这种停机时间对我的用户来说很麻烦。这是我不知道的 Linux 中的某些设置,还是对此我无能为力?如果有什么不同,我的服务器正在运行 Centos。

【问题讨论】:

  • 使用不同的文件名上传,然后创建一些 PHP 脚本(安全),删除旧文件并将新文件重命名为正确的名称。

标签: php linux apache ftp centos


【解决方案1】:

将其作为不同的文件名上传,然后将其重命名为破坏旧文件名。上传需要大量时间(如果“即时”之外的任何内容很重要)。 rename(或 mv)是原子的,不会让您的用户等待。您可以根据需要花费尽可能多的时间上传文件,然后在瞬间重命名它。

【讨论】:

  • @DavidO Symlinks man.. 符号链接。对你来说“一瞬间”很快,但是重命名文件或用 mv 替换文件会比使用符号链接慢得多。
  • 我看到了你的帖子。我正要跟进它并发表评论,要求提供一些文件。不是我不相信你。你可能是对的。我正在寻找可以找到启蒙的地方。 :)
  • @DavidO 想想看。您是否曾经将大量文件从一个目录移动到另一个目录?或者您是否曾经将一堆文件从一个目录重写到另一个目录?这需要几秒钟以上的时间。你认为因为它只是一个文件,所以它会是即时的吗?这不合理。符号链接就像编程或引用中的指针,它就像一个地址指针。
  • @DavidO 你在散布不好的建议。
【解决方案2】:

问题是文件传输不是原子的。它在上传文件时重写文件。如果在此期间下载文件,则会导致文件不完整。

如果您将文件上传到另一个位置,然后在上传完成后将文件移动到正确的位置,您将自动替换文件。

【讨论】:

  • mv 是原子的,对于单个文件基本上是即时的,除非您将文件移动到另一个物理卷。文件数据本身并没有移动,只是指向数据的文件系统发生了变化。
  • @datasage 除非您正在覆盖文件。 :-/
  • @FinalForm 文件描述符从一组集群移动到另一组集群会发生什么。数据本身不会在磁盘上重写。
【解决方案3】:

Pmivdb 实际上有它。将其上传到临时文件,然后重命名(确保保留旧文件的副本)。这真的是你最好的(唯一的?)选择。

【讨论】:

    【解决方案4】:

    如果您将文件放在单独的文件夹中并增加文件名,是否有一些 php 脚本会使用最新文件???

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多