我正在尝试使用 php 将文件上传到 ftp。服务器管理员的唯一要求是应该Require explicit FTP over TLS
加密。就是这样,但我Warning: ftp_fput() [function.ftp-fput]: Can't open data connection.
错误.我设法连接(在被动模式下),但它无法使用任何功能(ftp_put
、ftp_nb_put
、ftp_fput
)上传。错误始终相同。我正在尝试以下代码:
$host = 'ftps.someserver.net';
$user = '****';
$pass = '****';
$filename = "somefile.txt"
$dest_file = $filename;
$source_file = dirname(__FILE__) . '/' . $filename;
$fp = fopen($source_file, 'r');
$ftp = ftp_ssl_connect($host, 21, 180);
if (ftp_login($ftp,$user,$pass)) {
var_dump(ftp_pasv($ftp, true)); // gives me true
// # first way
// ftp_put($ftp, $dest_file, $source_file, FTP_BINARY);
// # second
// $ret = ftp_nb_put($ftp, $dest_file, $source_file, FTP_BINARY, FTP_AUTORESUME);
// while (FTP_MOREDATA == $ret)
// {
// $ret = ftp_nb_continue($ftp);
// }
// # third
if (ftp_fput($ftp, $dest_file, $fp, FTP_ASCII)) { // I was trying FTP_BINARY and FTP_ASCII.
echo "Successfully uploadedn";
} else {
echo "There was a problem while uploadingn";
}
}
ftp_close($ftp);
fclose($fp);
它适用于我自己的 ftp,它不要求显式 TLS。任何想法将不胜感激。
尝试使用 ftp_pasv($ftp, TRUE);
.我在一篇五年前对 php.net 的评论中发现了这个,它对我有用。
这个也得到了我。我发现这是我使用的PHP版本(5.4.28)的错误。我在 PHP 版本 5.6.31 中尝试了相同的脚本,一切正常。