首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过FTP上传- ftp_put()我不会打开一个连接到x.x(只到Y.Y)

通过FTP上传- ftp_put()我不会打开一个连接到x.x(只到Y.Y)
EN

Stack Overflow用户
提问于 2015-08-04 21:30:43
回答 2查看 8.6K关注 0票数 7

我试图使用一个主机通过FTP将内容上传到另一个主机。

“我不会打开到172.xxx.xxx.xxx的连接(只打开到54.xxx.xxx.xxx)”甚至与此无关,因为我没有连接到该主机。这是承载脚本的服务器的IP地址。但不能访问通过FTP访问的服务器。

代码语言:javascript
复制
$conn_id = ftp_connect('50.xxx.xxx.xxx');
ftp_pasv($conn_id, true);

$login_result = ftp_login($conn_id, 'user', 'pass');

$file = "http://example.com/filelocation.swf";

if (ftp_put($conn_id, "test.swf", $file, FTP_BINARY)) {
    echo 'File Uploaded'; 
} 
else {
    echo 'Problem with uploading'; 
}

ftp_put()我不会打开到172.xxx.xxx.xxx的连接(只打开到54.xxx.xxx.xxx)

此错误中的IP地址不会转到我试图连接到的服务器。ftp_login连接,没有问题。(我甚至不希望它以任何方式连接到这些IP地址,那么它为什么会这样想呢?)

我可以使用ftp_mkdir在服务器上添加一个目录。但是,当我使用ftp_put时,它会抛出该错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-05 06:33:26

错误信息实际上是非常相关的。

这是对PORT命令的Pure错误响应,当客户端要求服务器打开一个与客户机不同的IP地址的数据连接(正如服务器所看到的)。因此,这是服务器发送的远程错误消息,而不是PHP生成的本地错误消息。

这个问题通常是由客户端只知道其本地IP地址而不是外部IP地址引起的。

现在,问题是为什么PHP使用PORT,当您要求它使用被动模式(ftp_pasv)连接时。

这显然是因为您甚至在登录之前就已经调用了ftp_pasv

因此,服务器通过以下方式拒绝PASV调用:

你没有登录

不幸的是,PHP没有传播来自PASV调用的错误消息。它静默地返回到默认的活动模式。您可以通过其返回值(不检查)告诉调用失败。

只需在ftp_pasv之后移动ftp_login调用即可。

代码语言:javascript
复制
$conn_id = ftp_connect('50.xx.xx.xx');

ftp_login($conn_id, 'user', 'pass');

ftp_pasv($conn_id, true);

文献资料明确地提出了以下建议:

请注意,只有在成功登录后才能调用ftp_pasv(),否则它将失败。

当然,你应该做一个更好的错误检查。

有关类似的问题(仅针对ProFTPd),请参见:

放置返回“无法构建数据连接:连接被拒绝”

票数 26
EN

Stack Overflow用户

发布于 2020-12-16 12:54:48

如果仍然有问题,并且要添加到马丁·普里克瑞尔应答中,请尝试在连接之前和连接之后调用ftp_pasv

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31819695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档