ftp_get:非法PORT命令

Sri*_*i P 6 php ftp ubuntu

在'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);
?>
Run Code Online (Sandbox Code Playgroud)

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

错误是

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

Mar*_*ryl 15

"非法PORT命令"是的ProFTPD服务器发出消息,当收到PORT带有无效IP地址的命令.

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

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

在PHP中,通过调用切换到被动模式ftp_pasv功能ftp_login:

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

请参阅我关于FTP连接模式的文章,了解主动和被动模式的含义,以及现在每个人使用被动模式的原因.