gpt4 book ai didi

php - 如何确定文件是否仍在通过 ftp 传输

转载 作者:IT王子 更新时间:2023-10-28 23:44:02 26 4
gpt4 key购买 nike

我有一个目录,其中包含需要用 PHP 批量处理的文件。文件通过 FTP 复制到服务器上。有些文件很大,需要很长时间才能复制。我如何在 PHP 中确定文件是否仍在传输(这样我就可以跳过对该文件的处理并在下一次运行批处理时处理它)?

一种可能是获取文件大小,稍等片刻,然后验证文件大小是否不同。这不是防水的,因为传输有可能只是停顿了片刻......

最佳答案

执行此操作的最安全方法之一是使用临时名称上传文件,并在传输完成后重命名它们。您的程序应该跳过具有临时名称的文件(一个简单的扩展名就可以了。)显然这需要客户端(上传者)配合,所以它并不理想。

[如果需要,这还允许您在给定时间段后删除失败的(部分)传输。]

任何基于轮询文件大小的行为都是不安全且不安全的。

另一种方案(也需要上传者的配合)可能涉及先上传文件的哈希值和大小,然后才是实际文件。这样您就可以知道传输何时完成,以及传输是否一致。 (围绕这个想法有很多变体。)

不需要客户端合作的事情是检查文件是否被另一个进程打开。 (你如何做到这一点取决于操作系统 - 我不知道这样做的 PHP 内置。lsof 和/或 fuser 可用于各种 Unix-类型平台,Windows 有用于此的 API。)如果另一个进程打开了文件,则很可能它还没有完成。

请注意,如果您允许重新启动/恢复上传,或者您的 FTP 服务器软件在整个传输过程中没有保持文件打开,那么最后一种方法可能不是万无一失的,所以 YMMV。

关于php - 如何确定文件是否仍在通过 ftp 传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7241978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com