ftp_get:非法PORT命令

时间:2016-07-22 12:06:59

标签: php ubuntu ftp

在'localhost'上我试图从FTP服务器获取文件并成功创建本地文件。但是,当我在Ubuntu服务器上尝试时,它显示有问题,文件没有下载到服务器。这是代码。并在此位置创建的代码文件/var/www/html/

<?php
$local_file = 'whdfcleads.csv';
$server_file = 'hdfc/hdfc_leads.csv';
$ftp_server="*********";
$conn_id = ftp_connect($ftp_server)or die("Couldn't connect to $ftp_server");
$ftp_user_name="*****";
$ftp_user_pass="******";
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
  echo "Successfully written to $local_file\n";
}
else{
  echo "There was a problem\n";
}
ftp_close($conn_id);
?>

请帮我解决这个问题,在本地主机上它工作正常但在Ubuntu服务器本地文件中没有创建/下载。

错误是

Array (
    [type] => 2
    [message] => ftp_get(): Illegal PORT command
    [file] => /var/www/html/wftp.php
    [line] => 15
)

1 个答案:

答案 0 :(得分:15)

&#34; Illegal PORT命令&#34; 是ProFTPD服务器在收到带有无效IP地址的PORT命令时发出的消息。

当客户端在NAT后面并向服务器报告其内部IP地址时,通常会发生什么,而不知道服务器无法返回到该IP地址。

最简单(通常是正确的)解决方案是使用FTP被动模式,而不是主动模式(PHP中的默认模式)。

在PHP中,您可以在ftp_login后调用ftp_pasv function切换到被动模式:

...
ftp_login($conn_id, $usr, $pwd) or die("Cannot login");
ftp_pasv($conn_id, true) or die("Cannot switch to passive mode");
...

请参阅我的article on FTP connection modes以了解主动和被动模式的含义,以及现在每个人使用被动模式的原因。