PHP SFTP实现上传下载功能


Posted in PHP onJuly 26, 2017

 一、SFTP介绍:

使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议。区别:sftp是ssh内含的协议(ssh是加密的telnet协议), 只要sshd服务器启动了,它就可用,而且sftp安全性较高,它本身不需要ftp服务器启动。 sftp = ssh + ftp(安全文件传输协议)。由于ftp是明文传输的, 没有安全性,而sftp基于ssh,传输内容是加密过的,较为安全。目前网络不太安全,以前用telnet的都改用ssh2(SSH1已被破解)。

sftp这个工具和ftp用法一样。但是它的传输文件是通过ssl加密了的,即使被截获了也无法破解。而且sftp相比ftp功能要多一些,多了一些文件属性的设置。 

二、SSH2扩展配置

1.  下载地址:http://windows.php.net/downloads/pecl/releases/ssh2/0.12/

根据自己的php版本选择 扩展包,这里我使用的是php5.3,所以我下载的是 php_ssh2-0.12-5.3-ts-vc9-x86.zip(下载链接)

PHP SFTP实现上传下载功能

2. 解压完后,会有三个文件,libssh2.dll、php_ssh.dll、php_ssh2.pdb。 

3. 将 php_ssh.dll、php_ssh2.pdb 放到你的 php 扩展目录下 php/ext/ 下。 

4. 将libssh2.dll 复制到 c:/windows/system32 和 c:/windows/syswow64 各一份 

5.在 php.ini中加入 extension=php_ssh2.dll

6.重启Apache, 打印phpinfo(); 会出现 SSH2 扩展,表示安装成功

PHP SFTP实现上传下载功能

三、SFTP 代码DEMO

调用代码

$config = array(
  'host' =>'211.*.*.*', //服务器
  'port' => '23', //端口
  'username' =>'test', //用户名
  'password' =>'*****', //密码
 );
 $ftp = new Sftp($config);
 $localpath="E:/www/new_20170724.csv";
 $serverpath='/new_20170724.csv';
 $st = $ftp->upftp($localpath,$serverpath); //上传指定文件
 if($st == true){
  echo "success";
  
 }else{
  echo "fail";
 }

SFTP 封装类

<?php
/**
 * SFtp上传下载文件
 *
 */
namespace Common\ORG\Util;

class Sftp
{
 
 // 初始配置为NULL
 private $config = NULL;
 // 连接为NULL
 private $conn = NULL;
 // 初始化
 public function __construct($config)
 {
 $this->config = $config;
 $this->connect();
 }
 

 public function connect()
 {
 
 $this->conn = ssh2_connect($this->config['host'], $this->config['port']);
 if( ssh2_auth_password($this->conn, $this->config['username'], $this->config['password']))
 {
  
 }else{ 
  echo "无法在服务器进行身份验证";
 }
 
 }
 
 // 传输数据 传输层协议,获得数据
 public function downftp($remote, $local)
 { 
 $ressftp = ssh2_sftp($this->conn);
 return copy("ssh2.sftp://{$ressftp}".$remote, $local);
 }
 
 // 传输数据 传输层协议,写入ftp服务器数据
 public function upftp( $local,$remote, $file_mode = 0777)
 { 
 $ressftp = ssh2_sftp($this->conn);
 return copy($local,"ssh2.sftp://{$ressftp}".$remote); 
 
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP生成静态页面详解
Nov 19 PHP
PHP设计模式 注册表模式(多个类的注册)
Feb 05 PHP
php配置php-fpm启动参数及配置详解
Nov 04 PHP
php读取富文本的时p标签会出现红线是怎么回事
May 13 PHP
php类中的各种拦截器用法分析
Nov 03 PHP
php curl 获取https请求的2种方法
Apr 27 PHP
php结合正则获取字符串中数字
Jun 19 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
php连接oracle数据库的方法(测试成功)
May 26 PHP
PHP7匿名类用法分析
Sep 26 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 #PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 #PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 #PHP
php实现微信企业号支付个人的方法详解
Jul 26 #PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 #PHP
浅谈Yii乐观锁的使用及原理
Jul 25 #PHP
PHP异常处理定义与使用方法分析
Jul 25 #PHP
You might like
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
用cssText批量修改样式
2009/08/29 Javascript
Javascript面向对象编程
2012/03/18 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
详解Django中的form库的使用
2015/07/18 Python
python做反被爬保护的方法
2019/07/01 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
python实现udp聊天窗口
2020/03/31 Python
PageFactory设计模式基于python实现
2020/04/14 Python
如何用python免费看美剧
2020/08/11 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
初二学习计划书范文
2014/04/27 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL