在 php 中使用 ftp_put() 上传文件重复

File duplicates at upload with ftp_put() in php

所以情况是 "client" 更改了他们的 ftp 服务器,我有一个脚本可以通过 ftp_put() 在他们的服务器上上传内容。我认为当我上传文件时,他们现在在 ftp 服务器上拥有不同的权限。在他们的新服务器上,上传行为真的很奇怪,它复制了一些文件大约 5 次,而另一些则根本不复制。请记住,相同的脚本在他们的旧服务器上可以正常工作。

我从他们发给我的截图中注意到,他们的服务器现在只有读写权限。它曾经也有删除权限。当我尝试将文件上传到我们自己的服务器,并取消删除权限时,一切都停止了。

所以我的想法是,这可能是问题所在,因为日志显示,我在这里可能完全错了,ftp_put() 试图在将文件上传到服务器之前删除文件以避免重复。这是否正确,是否有解决方法?

发送文件的函数本身非常简单:

function send_to_ftp($ftp_server, $ftp_username, $ftp_password, $fileName, 

    $subFolder = "n/") {

        $ftp_conn = ftp_connect($ftp_server);
        if (!$ftp_conn) return false;
        $login = ftp_login($ftp_conn, $ftp_username, $ftp_password);
        $reciver_path = $subFolder . end(explode('/', $fileName));
        $local_folder = $fileName;
        return (ftp_put($ftp_conn, $reciver_path, $local_folder, FTP_ASCII));
        //ftp_close($ftp_conn);
    }

它在 php.net 的文档中缺失,但在评论中提到。 ftp_put 试图覆盖现有文件,这就是您遇到权限问题的原因。加倍可能是,不看phpftp_put函数的源码,覆盖真的是删除上传,或者你是运行函数多次。

我建议在尝试上传文件之前先检查文件是否已经存在(无论如何,检查文件在网络流量方面比上传完整大小的文件成本更低)。

使用ftp_nlist获取目标路径中的内容,看是否存在。 http://php.net/manual/en/function.ftp-nlist.php

如果您需要上传已经存在的文件,您需要与服务器所有者一起检查您的权限。