当前位置: 首页 > news >正文

php 实现SFTP上传文件

php 实现sftp文件上传完全可以用php.net 官网中的方式,代码如下:

 

 1 class SFTPConnection
 2 {
 3     private $connection;
 4     private $sftp;
 5 
 6     public function __construct($host, $port=22)
 7     {
 8         $this->connection = @ssh2_connect($host, $port);
 9         if (! $this->connection)
10             throw new Exception("Could not connect to $host on port $port.");
11     }
12 
13     public function login($username, $password)
14     {
15         if (! @ssh2_auth_password($this->connection, $username, $password))
16             throw new Exception("Could not authenticate with username $username " .
17                                 "and password $password.");
18 
19         $this->sftp = @ssh2_sftp($this->connection);
20         if (! $this->sftp)
21             throw new Exception("Could not initialize SFTP subsystem.");
22     }
23 
24     public function uploadFile($local_file, $remote_file)
25     {
26         $sftp = $this->sftp;
27         $stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w');
28 
29         if (! $stream)
30             throw new Exception("Could not open file: $remote_file");
31 
32         $data_to_send = @file_get_contents($local_file);
33         if ($data_to_send === false)
34             throw new Exception("Could not open local file: $local_file.");
35 
36         if (@fwrite($stream, $data_to_send) === false)
37             throw new Exception("Could not send data from file: $local_file.");
38 
39         @fclose($stream);
40     }
41 }
42 
43 try
44 {
45     $sftp = new SFTPConnection("localhost", 22);
46     $sftp->login("username", "password");
47     $sftp->uploadFile("/tmp/to_be_sent", "/tmp/to_be_received");
48 }
49 catch (Exception $e)
50 {
51     echo $e->getMessage() . "\n";
52 }

但是在进行中遇到了一个问题, 我的php版本是 PHP 5.6.31 (cli) (built: Aug  2 2017 15:05:23)  , 在执行

$stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w');

fopen的时候 执行文件 会报 "Segmentation fault" 的错误, 然后变成以下方式便可以解决

$stream = @fopen("ssh2.sftp://" . intval($sftp) . $remote_file, 'w');

其中,在实现sftp上传的时候,没有在意上传文件和上传目录的区别(例如: /upload 和 /upload/test.txt 的问题), 导致每次执行php 都会报 fopen(): Unable to open ssh2.sftp://5/upload on remote host. 问题解决方法就是 认真, 大写的认真

以上就是php做的, 只要登录sftp服务器 进行查看便知道结果.

sftp 命令登录方式:

sftp -oPort=port  user@server 然后输入密码, 进去之后可以到相对的目录查看文件是否存在.

 

转载于:https://www.cnblogs.com/arnoldlivip/p/8618722.html

相关文章:

  • WordCount项目总结
  • 2017校招真题在线编程- 网易 合唱团
  • BZOJ 1260: [CQOI2007]涂色paint【区间DP】
  • Java浅克隆和深克隆
  • C#注册OCX控件
  • Hibernate 一对一关联映射,mappedBy参数解析
  • range.FormulaR1C1属性
  • java学习--基础知识进阶第十天--笔记
  • 七、数据库技术的发展及新技术
  • C语言实现过滤ASCII在0~127范围内的字符,并去除重复的字符
  • JAVA gc垃圾回收机制
  • C#任意格式字符串转化为datetime格式
  • Jquery 遍历数组之$().each方法与$.each()方法介绍
  • kafka集群搭建
  • 《人月神话》读书笔记 第四周
  • [Vue CLI 3] 配置解析之 css.extract
  • 【mysql】环境安装、服务启动、密码设置
  • Android单元测试 - 几个重要问题
  • DOM的那些事
  • es的写入过程
  • Joomla 2.x, 3.x useful code cheatsheet
  • Laravel 菜鸟晋级之路
  • Python十分钟制作属于你自己的个性logo
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 对象管理器(defineProperty)学习笔记
  • 给新手的新浪微博 SDK 集成教程【一】
  • 讲清楚之javascript作用域
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 详解移动APP与web APP的区别
  • 消息队列系列二(IOT中消息队列的应用)
  • PostgreSQL之连接数修改
  • #HarmonyOS:基础语法
  • (003)SlickEdit Unity的补全
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (办公)springboot配置aop处理请求.
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (七)理解angular中的module和injector,即依赖注入
  • (算法)求1到1亿间的质数或素数
  • (一)基于IDEA的JAVA基础1
  • (转)ABI是什么
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ..回顾17,展望18
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET MVC 验证码
  • .NET连接数据库方式
  • // an array of int
  • /3GB和/USERVA开关
  • @GetMapping和@RequestMapping的区别