首页 > 解决方案 > 在 php 中使用 ftp_put() 上传文件重复

问题描述

所以情况是,假设“客户端”更改了他们的 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);
    }

标签: phpftpaccess-rights

解决方案


php.net 上的文档中缺少它,但在评论中提到了它。ftp_put 尝试覆盖现有文件,这就是您遇到权限问题的原因。加倍可能是,在不阅读 php ftp_put 函数的源代码的情况下,覆盖实际上是删除和上传,或者您正在多次运行该函数。

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

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

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


推荐阅读