ftp_ssl_connect可以处理隐式FTP over TLS吗?默认情况下它使用explicit。
我正在尝试上传到一个服务器,它在端口990上只接受tls上的隐式ftp;到目前为止还有人遇到过这种情况吗?你是怎么修复它的?
发布于 2016-05-24 10:45:34
对于任何碰巧在这个页面上使用谷歌并想要一个快速解决方案的人:
我扩展了class的答案,并使用此方法创建了一个简单的类,用于基本的上传/下载。我希望它能有所帮助!
<?php
class ImplicitFtp {
private $server;
private $username;
private $password;
public function __construct($server, $username, $password) {
$this->server = $server;
$this->username = $username;
$this->password = $password;
}
public function download($remote, $local = null) {
if ($local === null) {
$local = tempnam('/tmp', 'implicit_ftp');
}
if ($fp = fopen($local, 'w')) {
$ftp_server = 'ftps://' . $this->server . '/' . $remote;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $ftp_server);
curl_setopt($ch, CURLOPT_USERPWD, $this->username . ':' . $this->password);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
curl_setopt($ch, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS);
curl_setopt($ch, CURLOPT_UPLOAD, 0);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
if (curl_error($ch)) {
curl_close($ch);
return false;
} else {
curl_close($ch);
return $local;
}
}
return false;
}
public function upload($local, $remote) {
if ($fp = fopen($local, 'r')) {
$ftp_server = 'ftps://' . $this->server . '/' . $remote;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $ftp_server);
curl_setopt($ch, CURLOPT_USERPWD, $this->username . ':' . $this->password);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
curl_setopt($ch, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);
return !$err;
}
return false;
}
}https://stackoverflow.com/questions/6589730
复制相似问题