我有一个奇怪的问题:我可以连接到ftp服务器,创建目录但我无法获取目录中的文件列表。
可能出现什么问题?
事实:
ftp_pwd()
和ftp_mkdir()
工作得很快,ftp_nlist()
和ftp_rawlist()
等待ftp_connect()
中指定的超时时间(例如10秒)我认为问题不在脚本中,而是在ftp / server / firewall / access rights setup中。
有我的代码示例:
$conn = ftp_connect('my.host.here', 21, 10);
if (!$conn) {
throw new Exception('Unable to connect to FTP');
}
$login_result = ftp_login($conn, 'login', 'password');
if (!$login_result) {
throw new Exception('Unable to login to FTP');
}
// This is important part, because my server is behind frirewall/nat.
$paswRes = ftp_pasv($conn, true);
if (!$paswRes) {
throw new Exception('Failed to enable passive FTP mode');
}
$resPwd = ftp_pwd($conn); //Returns: "/"
$resMkdir = ftp_mkdir($conn , 'testDir'); //Returns: "/testDir", creates new dir
$resNlist = ftp_nlist($conn, '.'); //Returns: bool(false)
$resRawlist = ftp_rawlist($conn, '.'); //Returns: bool(false)
更新:
如果主机为localhost
,则有效。因此看起来问题在于防火墙/ ftp服务器设置。
我在ProFtpd
Amazon EC2
指定为PassivePorts 49152 65534
此范围已添加为Amazon EC2安全组49152 - 65534 0.0.0.0/0
答案 0 :(得分:0)
好的,我已经解决了这个问题。
这是FTP服务器配置错误(在我的情况下 - ProFTPD
服务器):
除PassivePorts
外,我必须指定MasqueradeAddress
MasqueradeAddress <your-Ftp-Server-Domain-Name-Or-Ip-Address>
更新另外,请查看以下文章:http://www.elitehosts.com/blog/php-ftp-passive-ftp-server-behind-nat-nightmare/