我在使用带有隐式ssl的ftps上的php curl检索文件时遇到问题(如下所述:

ftp_ssl_connect with implicit ftp over tls).问题是有时候 – 大概有5%的时间,我最终会部分下载.

我的课程或多或少地改编自改编自Nico Westerdale的答案,以下是相关方法:

class ftps {

private $server;

private $username;

private $password;

private $curlhandle;

public $dir = '/';

public function __construct($server, $username, $password) {

$this->server = $server;

$this->username = $username;

$this->password = $password;

$this->curlhandle = curl_init();

}

private function common($remote) {

curl_reset($this->curlhandle);

curl_setopt($this->curlhandle, CURLOPT_URL, 'ftps://' . $this->server . '/' . $remote);

curl_setopt($this->curlhandle, CURLOPT_USERPWD, $this->username . ':' . $this->password);

curl_setopt($this->curlhandle, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($this->curlhandle, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($this->curlhandle, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);

curl_setopt($this->curlhandle, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS);

return $this->curlhandle;

}

public function download($filepath, $local = false) {

$filename = basename($filepath);

$remote = dirname($filepath);

if ($remote == '.') {

$remote = $this->dir;

}

if ($local === false) {

$local = $filename;

}

if ($fp = fopen($local, 'w')) {

$this->curlhandle = self::common($remote . $filename);

curl_setopt($this->curlhandle, CURLOPT_UPLOAD, 0);

curl_setopt($this->curlhandle, CURLOPT_FILE, $fp);

curl_exec($this->curlhandle);

if (curl_error($this->curlhandle)) {

return false;

} else {

return $local;

}

}

return false;

}

}

我这样使用它:

$ftps = new ftps('example.com','john_doe','123456');

$ftps->download('remote_filename','local_filename');

正如我上面提到的,除了大约5%的时间结果是部分下载的文件之外,这几乎完美无缺.然后我检查远程服务器,并且能够验证文件确实存在于其中 – 再次尝试脚本,它总是在第二次尝试时获取整个文件.

什么会导致像这样使用卷曲的间歇性问题?我的下一步行动是实现某种校验和并继续下载尝试,直到所有的哈希值,但这感觉更像是一个草率的解决方案而不是真正的解决方案,并且知道问题的实际根源会很好.

php ftps,使用PHP Curl的FTPS获得部分下载相关推荐

  1. linux curl 命令 http请求、下载文件、ftp上传下载

    1. curl 命令简介 cURL(CommandLine Uniform Resource Locator),是一个利用 URL 语法,在命令行终端下使用的网络请求工具,支持 HTTP.HTTPS. ...

  2. linux搭建ftps(vsftpd),java代码测试上传下载

    一.服务器安装 操作系统Ubuntu:sudo apt-get install vsftpd操作系统Centos:sudo yum install -y vsftpd##创建ftps用户,设置默认目录 ...

  3. 下载神器:axel aria2 mwget多线程快速下载取代curl和wget的多线程下载命令

    对于在 Linux 的下载工具而言,比较常用的就是 wget 或者 curl,吾也一直用 wget 的方式进行网络上的资源下载.偶然发现了 axel 这个支持多线程的下载工具,试用了几次之后,发现网络 ...

  4. 使用CURL来自动登录并下载东西

    要利用curl,关键就是要首先登录,获得cookie,然后才能下载文件.这样就可以利用CURL做很多自动化的脚本或是程序了.关键点是这么几个: 1. 要分析网站的登录form,看需要提供哪些信息.然后 ...

  5. 【扫盲】什么是FTP、FTPS 和 SFTP?

    无论是网盘还是云存储,上传都是一项很简单的操作.那些便捷好用的上传整理工具所用的 FTP 协议到底是什么意义,繁杂的模式又有何区别? 二狗子最近搭建了一个图片分享网站,每天都有好多人在他的网站上传许多 ...

  6. 浅谈 FTP、FTPS 与 SFTP

    无论是网盘还是云存储,上传都是一项很简单的操作.那些便捷好用的上传整理工具所用的 FTP 协议到底是什么意义,繁杂的模式又有何区别? 二狗子最近搭建了一个图片分享网站,每天都有好多人在他的网站上传许多 ...

  7. ftp改为sftp_科普!一文详解 FTP、FTPS 与 SFTP 的原理

    FTP.FTPS 与 SFTP 简介 FTP FTP 即 文件传输协议(英语:File Transfer Protocol 的缩写)是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议. ...

  8. ftp改为sftp_浅谈 FTP、FTPS 与 SFTP

    二狗子最近搭建了一个图片分享网站,每天都有好多人在他的网站上传许多照片,这些照片还会通过内部的逻辑同步到又拍云存储中,非常方便. 但不久后问题就来了,由于刚开始的用户照片管理规划没有做好,随着用户上传 ...

  9. 详解 FTP、FTPS 与 SFTP 的原理

    FTP.FTPS 与 SFTP 简介 FTP FTP 即 文件传输协议(英语:File Transfer Protocol 的缩写)是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议. ...

  10. CHAPTER 5 文件共享 - FTP/FTPS/SFTP

    文件共享 - FTP 1 FTP 1.1 传输方式 1. ASCII传输方式 2. 二进制传输模式 3. 两种传输方式的区别 1.2 支持的模式 1. 主动模式(PORT) 2. 被动模式(PASV) ...

最新文章

  1. CBNet和DetectoRS:COCO数据集霸榜模型
  2. mysql建立pdm模型_如何使用PowerDesigner创建物理数据模型(PDM)
  3. Java虚拟机04——垃圾收集器
  4. 修改wordpress地址(URL)导致不能登录后台
  5. Python 的 time 模块导入及其方法
  6. 迭代器、可迭代对象与生成器
  7. abaqus的python安装文件在哪_在abaqus2016中安装xlwt和xlrd库教程
  8. 使用fuse.js_如何使用Fuse.js将搜索添加到React应用
  9. 《精通Matlab数字图像处理与识别》一6.2 傅立叶变换基础知识
  10. 【LeetCode】剑指 Offer 46. 把数字翻译成字符串
  11. 无法在VMware Player中安装64位系统
  12. 蓝桥杯 ADV-81 算法提高 数的运算
  13. 令仔代码收藏系列(二)----BASE64编码
  14. python 手机号码识别_python3库可以识别电话号码、姓名、电子邮件和地址
  15. 以淘宝网为例,解析大型Java项目架构演进
  16. 金仓数据库KingbaseES blob类型数据导入导出
  17. 【课程设计】基于图像处理的一维条形码识别-含matlab源码
  18. COUNTIFS函数
  19. 荣耀v40和华为Nova8pro哪个好 华为Nova8pro和荣耀v40的区别
  20. linux用户和组管理的实验报告,linux用户管理任务实验报告

热门文章

  1. Chromium OS Autotest 概述
  2. 通过QQ 2012 客户端协议获取clientkey的0x30数据包分析
  3. 高仿城通网盘php,PHP代码提取城通网盘直链跳过广告下载
  4. JDBC的PreparedStatement接口
  5. Android App图标尺寸
  6. 滑动平均滤波c语言_9种简单的数字滤波算法(C语言源程序)
  7. 平衡小车之家--风力摆开箱实录(附资料)
  8. 【广外女生】远程监控软件2008A免费版本
  9. 将pip源更换到国内镜像,如清华源,阿里源等
  10. 【AE】缺少Color属性或方法解决办法