我有一台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