php中使用sftp教程

 这篇文章主要介绍了php中使用sftp教程,本文讲解了ftp 协议简介、ssh协议、sftp 协议等知识,并给出了FTP和SFTP操作类实现代码,需要的朋友可以参考下

 
 

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196

<?php
 
 
/**
php 中的sftp 使用教程
Telnet、FTP、SSH、SFTP、SSL
(一) ftp 协议简介
 
FTP(File Transfer Protocol,文件传输协议)是互联网上常用的协议之一,人们用FTP实现互连网上的文件传输。
如同其他的很多通讯协议,FTP通讯协议也采用客户机 / 服务器(Client / Server )架构。用户可以通过各种不同的FTP客户端程序,
借助FTP协议,来连接FTP服务器,以上传或者下载文件FTP的命令传输和数据传输是通过不同的端口进行传输的
FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,
这样FTP客户在和服 务器建立连接前就要经过一个被广为熟知的"三次握手"的过程,它带来的意义在于客户与服务器之间的连接是可靠的,
而且是面向连接,为数据的传输提供了可靠 的保证。
 
(二)ssh协议
 
ssh 的全称为 SecureShell ,可以报所有的传输数据惊醒加密,这样'中间人'就不能获得我们传输的数据
同事,传输的数据是经过压缩的,可以加快传输的速度.ssh有很多功能,可以替代telnet 也可也为ftppop ,提供一个安全的通道
 
SSH协议框架中最主要的部分是三个协议:
 
* 传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持;
* 用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别;
* 连接协议(The Connection Protocol) 将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用;
各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。
 
(三)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功能要多一些,多了一些文件属性的设置
 
 
*/
 
 
 
 
// 注意这里只是为了介绍ftp ,并没有做验证 ;
class ftp{
 
// 初始配置为NULL
private $config =NULL ;
// 连接为NULL
private $conn = NULL;
 
public function init($config){
$this->config = $config;
}
 
// ftp 连接
public function connect(){
return $this->conn = ftp_connect($this->config['host'],$this->config['port']));
}
 
 
// 传输数据 传输层协议,获得数据 true or false
public function download($remote, $local,$mode = 'auto'){
return $result = @ftp_get($this->conn, $localpath, $remotepath, $mode);
}
 
// 传输数据 传输层协议,上传数据 true or false
public function upload($remote, $local,$mode = 'auto'){
return $result = @ftp_put($this->conn, $localpath, $remotepath, $mode);
}
 
 
// 删除文件
public function remove($remote){
return $result = @ftp_delete($this->conn_id, $file);
}
 
 
}
 
 
 
// 使用
$config = array(
'hostname' => 'localhost',
'username' => 'root',
'password' => 'root',
'port' => 21
 
) ;
 
$ftp = new Ftp();
$ftp->connect($config);
$ftp->upload('ftp_err.log','ftp_upload.log');
$ftp->download('ftp_upload.log','ftp_download.log');
 
 
 
/*根据上面的三个协议写出基于ssh 的ftp 类
我们知道进行身份认证的方式有两种:公钥;密码 ;
(1) 使用密码登陆
(2) 免密码登陆也就是使用公钥登陆
 
*/
 
class sftp{
 
 
// 初始配置为NULL
private $config =NULL ;
// 连接为NULL
private $conn = NULL;
 
 
// 是否使用秘钥登陆
private $use_pubkey_file= false;
 
// 初始化
public function init($config){
$this->config = $config ;
}
 
 
// 连接ssh ,连接有两种方式(1) 使用密码
// (2) 使用秘钥
public function connect(){
 
$methods['hostkey'] = $use_pubkey_file ? 'ssh-rsa' : [] ;
$con = ssh2_connect($this->config['host'], $this->config['port'], $methods);
//(1) 使用秘钥的时候
if($use_pubkey_file){
// 用户认证协议
$rc = ssh2_auth_pubkey_file(
$conn,
$this->config['user'],
$this->config['pubkey_file'],
$this->config['privkey_file'],
$this->config['passphrase'])
);
//(2) 使用登陆用户名字和登陆密码
}else{
$rc = ssh2_auth_password( $conn, $this->conf_['user'],$this->conf_['passwd']);
 
}
 
return $rc ;
}
 
 
// 传输数据 传输层协议,获得数据
public function download($remote, $local){
 
return ssh2_scp_recv($this->conn_, $remote, $local);
}
 
//传输数据 传输层协议,写入ftp服务器数据
public function upload($remote, $local,$file_mode=0664){
return ssh2_scp_send($this->conn_, $local, $remote, $file_mode);
 
}
 
// 删除文件
public function remove($remote){
$sftp = ssh2_sftp($this->conn_);
$rc = false;
 
if (is_dir("ssh2.sftp://{$sftp}/{$remote}")) {
$rc = false ;
 
// ssh 删除文件夹
$rc = ssh2_sftp_rmdir($sftp, $remote);
} else {
// 删除文件
$rc = ssh2_sftp_unlink($sftp, $remote);
}
return $rc;
 
}
 
 
 
 
}
 
 
$config = [
"host" => "192.168.1.1 ", // ftp地址
"user" => "***",
"port" => "22",
"pubkey_path" => "/root/.ssh/id_rsa.pub", // 公钥的存储地址
"privkey_path" => "/root/.ssh/id_rsa", // 私钥的存储地址
];
 
$handle = new SftpAccess();
$handle->init($config);
$rc = $handle->connect();
$handle->getData(remote, $local);
 

时间: 2024-10-29 17:25:11

php中使用sftp教程的相关文章

php中使用sftp教程_php技巧

<?php /** php 中的sftp 使用教程 Telnet.FTP.SSH.SFTP.SSL (一) ftp 协议简介 FTP(File Transfer Protocol,文件传输协议)是互联网上常用的协议之一,人们用FTP实现互连网上的文件传输. 如同其他的很多通讯协议,FTP通讯协议也采用客户机 / 服务器(Client / Server )架构.用户可以通过各种不同的FTP客户端程序, 借助FTP协议,来连接FTP服务器,以上传或者下载文件FTP的命令传输和数据传输是通过不同的端口

Python中使用strip()方法删除字符串中空格的教程

  这篇文章主要介绍了Python中使用strip()方法删除字符串中空格的教程,是Python入门学习中的基础知识,需要的朋友可以参考下 strip()方法返回所有字符从开始及字符串的末尾(默认空格字符)被去除后的字符串的一个副本. 语法 以下是strip()方法的语法: ? 1 str.strip([chars]); 参数 chars -- 字符-从开始或结束的字符串被删除去除. 返回值 此方法返回所有字符从开始及字符串的末尾(默认空格字符)被去除后的字符串的一个副本. 例子 下面的例子显示

如何在 Linux 中使用 sFTP 上传或下载文件与文件夹

sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与 FTP(文件传输协议)类似. 然而,sFTP 比 FTP 更安全:它通过加密 SSH 传输处理所有操作. 它可以配置使用几个有用的 SSH 功能,如公钥认证和压缩. 它连接并登录到指定的远程机器,然后切换到交互式命令模式,在该模式下用户可以执行各种命令. 在本文中,我们将向你展示如何使用 sFTP 上传/下载整个目录(包括其子目录和子文件). 如何在 Linux 中使用 sFTP 传输文件/文件夹 默认情况下,SFTP 协

iOS中SQLite使用教程_IOS

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl.C#.PHP.Java等,还有ODBC接口,同样比起Mysql.PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快.SQLite第一个Alpha版本诞生于2

nginx中配置php-FPM教程详解

nginx中配置php-FPM教程 nginx 可以直接调用FPM来驱动php,从此就可以放弃apache了.什么原因不多说了. 先下载php5.4的安装包. 照别人的说法  代码如下 复制代码 ./configure --enable-fastcgi --prefix=/data1/server/php-cgi --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-mbstring --with-mysql

Flash中人物绘画教程

教程 1.打开Flash MX软件,在工具栏中使用线条工具,绘制三个线段,呈倒三角状,然后使用箭头工具将线条拖出一定的弧度,再使用第二箭头工具,也就是贝塞尔工具拖动弧线的顶点.完成后如图1所示,这就是人物脸部的简单轮廓. 2.绘制更多的线条,使用线条的宽度为2,在绘制中注意,多使用贝塞尔工具.我们在绘制整个人物的外形部分时,特别要注意在一些小细节方面,比如线条的弧度,它关系到人物造型,几乎没有任何一段线条是直线(图2). 3.使用油漆桶工具在头发中填充棕色#4E1616,通过进一步的修饰,强调人

PS合成世界末日黑暗战火场景中的美女教程

效果图1: 三联推荐:photoshop7.0迷你版免费下载    |  Photoshop CS5 中文免费下载  |  photoshop免费下载   查看更多PS教程 效果图2: 人物素材: 教程: 1.搭建场景,把天空补齐,添加火焰素材和塔楼,关于抠素材这儿我就不讲了,主要也就是选区工具的应用. 2.继续添加素材,为了增加气氛场景中加点烟雾效果,新建一层滤镜云彩,在这层上添加蒙版,在蒙版上也运用去彩滤镜,看图层中的效果降些透明度, 加入人物和飞机,再为人物添加阴影,主要运用复制人物,把明

PhotoShop制作油漆中的舞者教程

photoshop制作方法大体描述:一个素材拼接教程,运用抠图拼接,色相调整,图层叠加等,将瓶子.油漆喷溅和舞者造型的素材精选处理进行拼接.蜗牛工作室自评:取得了非常成功的视觉效果,创意也非常出色,并且贴切主题 第一步:创建一个595×842像素,黑色背景的画布.使用画笔工具,笔刷选择圆,硬度为0,大小600px,颜色#333333,新建图层命名为"灰圆心背景",制作如下图灰色圆心的图层.效果如下图 第二步:使用上面同样的方法,绘出下面的例子中你喜欢的颜色.本人采用三种颜色,画笔大小不

在Word中制作空心字教程

  话不多说,请看具体操作步骤:具体操作步骤: 1.在工具栏中,选择"单行文字".如果没有,请将绘图工具栏调出. 2.用鼠标拉出一个框. 3.在框中输入文字,这里输入一个"烧",单击鼠标右键,在弹出的对话框中选择"对象属性". 4.在弹出的"单行文字对象属性"对话框中,有五个选项,这里选中"文字效果"选项,将字号"自动"选中. 5.执行"格式→文字修饰→空心"命令.