php中执行ftp_put失败,PHP ftp_put返回“无法建立数据连接:连接被拒绝”

我有一台PC,该PC正在通过PHP运行一些FTP,我知道它在1-2个月前就可以工作,但是现在回到它上面,我发现PC不再工作了.我知道我一直在使用PC,但是我想不到可能发生了什么变化.

PHP抛出错误消息阅读

Unable to build data connection: Connection refused

…当我使用ftp_put()函数时.

我使用的缩减代码是:

$trackErrors = ini_get('track_errors');

ini_set('track_errors', 1);

$server="***.***.***.***";

$port=21;

echo "

Connecting to $server:$port
";

$conn_id = ftp_connect($server,$port,9999999) or die("
Unable to connect to ".$server.":$port server.");

if ( !$conn_id ) {

$errmsg = $php_errormsg;

echo "

ERR:$errmsg";

}

else {

$passive=false;

echo "

Setting Passive Mode=$passive";

ftp_pasv($conn_id, $passive);

$user="*********";

$pass="*********";

echo "

Connecting as $user/*****";

if (!ftp_login($conn_id, $user, $pass)) {

$msg = "Failed to login to $selected_server as $user;
check logincredentials in the Settings";

echo "

$msg";

$errmsg = $php_errormsg;

echo "

ERR:$errmsg";

return $msg;

}

ftp_set_option($conn_id, FTP_TIMEOUT_SEC, 10000);

if (!@ftp_put($conn_id, "test.txt", "C:......test.txt", FTP_BINARY)) {

echo "

ftp_put failed";

$errmsg = $php_errormsg;

echo "

ERR:$errmsg";

}

echo "


Done";

}

?>

作为网页运行时的输出是

Connecting to ***.***.***.***:21

Setting Passive Mode=

Connecting as *******/*****

ftp_put failed

ERR:ftp_put(): Unable to build data connection: Connection refused

Done

结果是ftp_put()给出了错误消息,并在服务器上留下了具有正确文件名的零(0)字节文件.

奇怪的是

>相同的代码/连接信息可以在另一台笔记本电脑上正常工作

>推送文件时,使用FileZilla可以使相同的连接信息正常运行

>问题在多台服务器上发生(即,不仅仅是一个特定的目的地出现了问题)

此外,这似乎与被动模式无关(启用和未启用此模式都会失败)

有没有人有什么建议?

谢谢

安倍

解决方法:

您正在使用活动的FTP模式.在活动模式下,服务器尝试连接到客户端.在大多数网络配置中,这是不可能的,因为客户端计算机通常位于防火墙后面.

这就是服务器失败的原因:

Unable to build data connection: Connection refused

在这种情况下,特别是ProFTPD错误消息.

如果禁用了防火墙或具有允许在非特权端口上传入流量的规则,则该代码可以在其他计算机上工作.

FileZilla之所以起作用,是因为它默认为被动模式(就像大多数现代FTP客户端一样).

您已经声称也尝试过被动模式,但仍收到相同的错误消息.

那是因为您使用的ftp_pasv调用不正确.

您必须在ftp_login之后移动ftp_pasv调用.

$user = "*********";

$pass = "*********";

echo "

Connecting as $user/*****";

if (!ftp_login($conn_id, $user, $pass)) {

// ...

}

$passive = true;

echo "

Setting Passive Mode=$passive";

ftp_pasv($conn_id, $passive);

Please note that ftp_pasv() can only be called after a successful login or otherwise it will fail.

标签:ftp,php

来源: https://codeday.me/bug/20191026/1934699.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值