【发布时间】:2019-02-16 00:45:49
【问题描述】:
我想使用 PHP 连接到 FTP 以上传生成的报告。根据远程服务器,FTP 需要处于 ACTIVE 模式。
这是我的代码:
ini_set('display_errors', '1');
error_reporting(E_ALL);
$conn_id = ftp_connect('myftpserver.com', 21);
if($conn_id)
{
// login with username and password
$login_result = ftp_login($conn_id, 'mysuer', 'password');
$passive = ftp_pasv($conn_id,FALSE);
echo "is active?<br/>";
var_dump($passive);
echo 'Login Result:';
var_dump($login_result);
$files_list = ftp_nlist($conn_id, '/MyFolder/');
echo "<br/>files list ";
var_dump($files_list);
}
else
{
var_dump('Unable to connect to FTP Server');
}
当我从本地计算机或普通共享服务器运行它时,我可以获取列表,但我无法从我的 AWS AMI 实例运行脚本。出于测试目的,我什至也打开了所有入站流量。仍然没有运气。另外,关键是如果我尝试使用其他一些 ftp 详细信息,我能够得到ftp_nlist 的响应。但不是为了这个。到目前为止,我在 3 个 AWS 实例上进行了尝试。产生了相同的结果。
我只能说这是我的服务器安全组/防火墙的问题所在。但想不通。请帮忙。
我从服务器得到的响应:
is active
bool(true)
Login Result:bool(true)
files list bool(false)
【问题讨论】:
-
可能相关:stackoverflow.com/questions/8219322/…。在被动模式下,数据连接由客户端发起,而不是由服务器发起。如果客户端位于防火墙后面,则可能需要它。
-
嗨@jarmod,感谢您的回复。我一定会使用主动模式。事实是我能够在我的本地 ubuntu (LAMP) 和 Windows 系统 (XAMPP) 上正确运行它。但不是在 AWS 上。所以,我觉得代码是正确的。我在安全设置或防火墙中遗漏了一些东西。
-
telnet myftpserver.com 21来自问题服务器。通常完全允许出站连接,除非 VPC 没有网关连接。如果没有网关连接,ping google.com也会失败。然后使用适当的路由表将“Internet 网关”添加到您的 VPC。 route table -
[ec2-user@ip-172-31-40-119 ~]$ telnet myftpserver.com 21Trying xxx.xx.xx.xx...Connected to myftpserver.com.Escape character is '^]'.220 Marketplace ready...我使用 telnet 命令收到的响应。让我检查一下我的路由表。 -
你的网络看起来不错。不知道是什么问题。
标签: php amazon-web-services firewall amazon-ami aws-security-group