gpt4 book ai didi

PHP:如何避免读取通过 FTP 推送给我的部分文件?

转载 作者:行者123 更新时间:2023-12-02 21:07:23 25 4
gpt4 key购买 nike

文件正在通过 FTP 推送到我的服务器。我在 Drupal 模块中使用 PHP 代码处理它们。操作系统是Ubuntu,FTP服务器是vsftp。

我会定期检查新文件,使用 SimpleXML 处理它们并将它们移至“完成”文件夹。如何避免处理部分上传的文件?

vsftp 的 lock_upload_files 默认为 yes。我想先尝试移动文件,希望移动在当前上传的文件上失败。这似乎并没有发生,至少在命令行上是这样。如果我开始上传一个大文件并移动,它只会在新位置不断增长。我猜目录项没有被锁定。

我是否应该在尝试加载到 SimpleXML 之前尝试使用模式“a”或“r+”来查看它是否成功,或者是否有更好的方法来执行此操作?我想我只能检测到 SimpleXML 加载失败,但是......这看起来很困惑。

我无法控制发件人。他们不会进行上传和重命名。

谢谢

最佳答案

使用 vsftpdlock_upload_files 配置选项会导致使用 fcntl() 函数锁定文件。这会将咨询锁置于正在上传的文件上。其他程序不需要考虑咨询锁,例如 mv 就不需要。一般来说,咨询锁只是对关心此类锁的程序的建议。您需要另一个命令行工具,例如 lockrun,它尊重咨询锁。

注意:lockrun 必须使用 WAIT_AND_LOCK(fd) 宏进行编译才能使用 lockf() 而不是 flock () 函数,以便处理 Linux 下由 fcntl() 设置的锁。因此,当使用 lockf() 编译 lockrun 时,它将与 vsftpd 设置的锁配合。

利用这些功能(lockrunmvlock_upload_files),您可以构建一个 shell 脚本或类似的脚本来逐个移动文件,检查如果文件预先被锁定,并且只要文件移动就保持建议锁。如果文件被 vsftpd 锁定,则 lockrun 可以跳过对 mv 的调用,从而跳过正在运行的上传。

关于PHP:如何避免读取通过 FTP 推送给我的部分文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5826890/

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