我在使用ftp_put时遇到了一个奇怪的问题。
我的代码在连接到旧的Linux服务器(ftp_connect)时工作正常,但是在尝试将文件上传到新的Windows服务器(客户端选择)时失败-我们在Windows服务器上运行Filezilla服务器。
我完全迷路了,不知道是什么导致了这些错误。 也许你们中的一个也许可以为我指明正确的方向。
从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)
谢谢
肯尼思
答案 0 :(得分:2)
如果ftp_put()
失败,则很有可能是由于防火墙保护。因此,发生这种情况是因为连接处于ACTIVE
模式。
借助ftp_pasv()切换到PASSIVE
模式以通过防火墙安全性。
有关主动和被动FTP连接的更多详细信息,请参见here