ftp_put,可以创建文件夹,但不能上传文件

时间:2018-07-31 08:38:44

标签: php

我在使用ftp_put时遇到了一个奇怪的问题。

我的代码在连接到旧的Linux服务器(ftp_connect)时工作正常,但是在尝试将文件上传到新的Windows服务器(客户端选择)时失败-我们在Windows服务器上运行Filezilla服务器。

  • 可以连接到Windows服务器的作品(ftp_connect)。
  • 创建文件夹有效(ftp_mkdir)。
  • 上传文件无效-不知道为什么(ftp_put)。
  • 我可以使用FileZilla上传文件。
  • 用户对Filezilla服务器具有完全权限。
  • 连接到Windows服务器时,连接到“ C:/ FTP”。

我完全迷路了,不知道是什么导致了这些错误。 也许你们中的一个也许可以为我指明正确的方向。

从Linux更改为Windows Server时,我的代码是否需要更改路径?文件夹结构是100%相同的(文件必须保存在名为“ SE”的文件夹中)。

这是我的代码:

# Conf ID
$conf_id = '7AEHQ6GS'; // for testing

# Files
$file1 = "xml/$conf_id/cylinder-tube.xml";

# FTP info
$ftp_host = '';
$ftp_port = '';
$ftp_user = '';
$ftp_pass = '';


# Connect to FTP server
$conn_id = ftp_connect($ftp_host, $ftp_port, 10);

# Connect to FTP Server
if($conn_id) {

    if(@ftp_login($conn_id, $ftp_user, $ftp_pass)) {

        if(file_exists($file1)) {

            # Change directory
            ftp_chdir($conn_id, 'SE');

            # Create folder
            ftp_mkdir($conn_id, $conf_id);

            # Change directory
            ftp_chdir($conn_id, $conf_id);

            # Upload files
            if(
                ftp_put($conn_id, basename($file1), $file1, FTP_BINARY)
            ) {

                # Delete local files
                @unlink($file1);

                # Delete local folder
                rmdir("xml/$conf_id");

            }else{
                $st['status'] = 'FTP003';
                die(json_encode($st));
            }
        }else{      
            $st['status'] = 'FEJL011';
            die(json_encode($st));
        }
    } else {
        $st['status'] = 'FTP002';
        die(json_encode($st));
    }
}else{
    $st['status'] = 'FTP001';
    die(json_encode($st));
}

这是我的代码失败的地方:

ftp_put($conn_id, basename($file1), $file1, FTP_BINARY)

谢谢

肯尼思

1 个答案:

答案 0 :(得分:2)

如果ftp_put()失败,则很有可能是由于防火墙保护。因此,发生这种情况是因为连接处于ACTIVE模式。

借助ftp_pasv()切换到PASSIVE模式以通过防火墙安全性。

有关主动和被动FTP连接的更多详细信息,请参见here