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 相关文章推荐
如何删除多级目录
Oct 09 PHP
php连接mysql数据库代码
Mar 10 PHP
php检测图片木马多进制编程实践
Apr 11 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
PHP利用str_replace防注入的方法
Nov 10 PHP
php计算指定目录下文件占用空间的方法
Mar 13 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
Sep 19 PHP
php 二维数组时间排序实现代码
Nov 19 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
php新建文件的方法实例
Sep 26 PHP
在laravel框架中使用model层的方法
Oct 08 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
PHP4之COOKIE支持详解
2006/10/09 PHP
PHP中的cookie
2006/11/26 PHP
php adodb分页实现代码
2009/03/19 PHP
php数组中删除元素的实现代码
2012/06/22 PHP
PHP 之Section与Cookie使用总结
2012/09/14 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
2017/09/30 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
详解Python流程控制语句
2020/10/28 Python
python 递归相关知识总结
2021/03/03 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
医院护士求职自荐信格式
2013/09/21 职场文书
期末自我鉴定
2014/02/02 职场文书
新年主持词
2014/03/27 职场文书
三八节标语
2014/06/27 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
高一军训决心书
2015/02/05 职场文书
政府会议通知范文
2015/04/15 职场文书
Vue Element plus使用方法梳理
2022/12/24 Vue.js