ftp_get:非法PORT命令

问题描述 投票:5回答:1

在'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
)
php ubuntu ftp
1个回答
15
投票

“非法PORT命令”是ProFTPD服务器在收到带有无效IP地址的PORT命令时发出的消息。

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

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

在PHP中,通过在ftp_pasv function之后调用ftp_login切换到被动模式:

...
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以了解主动和被动模式的含义,以及为什么现在每个人都使用被动模式。

© www.soinside.com 2019 - 2024. All rights reserved.