情景:客户端上传图片到服务器A,服务器A同步上传至另外一个静态资源服务器B

环境:php7 linux(ubuntu)

安装php的ssh2扩展

sudo apt-get install libssh2--dev

sudo  apt-get install php-ssh2

sudo service apache2 restart

可在图片上传至服务器A后同步上传至B

A上传文件至B  函数

 //scp上传文件至远程服务 $host为B服务器域名(IP) $user B服务器用户 $password B服务器密码 $local_file为本地文件, $remote_file为远程文件
function scpUploadFile($host,$user,$password,$local_file,$remote_file){
$ssh2 = ssh2_connect($host, 22); //先登陆SSH并连接
ssh2_auth_password($ssh2,$user,$password);//身份认证 也可以用
//本地传输文件到远程服务器
$stream=ssh2_scp_send($ssh2, $local_file, $remote_file, 0777);
$data =['host'=>$host,'user'=>$user,'pass'=>$password,'lo'=>$local_file,'re'=>$remote_file]; //默认权限为0644,返回值为bool值,true或false.
return $stream;
}

A从B下载文件 函数

 function scpDownloadFile($host,$user,$password,$local_file,$remote_file){
$ssh2 = ssh2_connect($host, 22);
ssh2_auth_password($ssh2,$user,$password);
//从远程服务器下载文件
$stream=ssh2_scp_revc($ssh2, $remote_file, $local_file);
return $stream;
}

上述连接及身份认证方式 可换为SSH密钥链接

 $ssh2 = ssh2_connect('shell.example.com', 22, array('hostkey'=>'ssh-rsa'));

 if (ssh2_auth_pubkey_file($connection, 'username',
'/home/username/.ssh/id_rsa.pub',
'/home/username/.ssh/id_rsa', 'secret')) {
echo "Public Key Authentication Successful\n";
} else {
die('Public Key Authentication Failed');
}

简单处理客户端多图片上传请求(处理粗糙,可自行完善)

多图片上传数组处理

 function buildImgArray($_FILES){
$i = 0;
foreach ($files as $v){//三维数组转换成2维数组
if(is_string($v['name'])){ //单文件上传
$info[$i] = $v;
$i++;
}else{ // 多文件上传
foreach ($v['name'] as $key=>$val){//2维数组转换成1维数组
//取出一维数组的值,然后形成另一个数组
//新的数组的结构为:info=>i=>('name','size'.....)
$info[$i]['name'] = $v['name'][$key];
$info[$i]['size'] = $v['size'][$key];
$info[$i]['type'] = $v['type'][$key];
$info[$i]['tmp_name'] = $v['tmp_name'][$key];
$info[$i]['error'] = $v['error'][$key];
$i++;
}
}
}
return $info;
}

上传至A并同步上传至B

 function uploadFile($files,$host,$user,$password,$maxSize=1048576,$imgFlag=true){
$date = getdate(time());
$year = $date['year'];
$mon = $date['mon'];
$day = $date['mday'];
$path = 'upload/';
if (! is_dir($path)) {
mkdir($path,0777,true);
}
$i = 0;
foreach ($files as $val) {
if ($val['error'] == 0) {
if($val['size']>$maxSize){
echo "文件太大了";
return 1;
}
if($imgFlag){
$result = getimagesize($val['tmp_name']);
if(!$result){
echo "您上传的不是一个真正图片";
return 2;
}
}
if(!is_uploaded_file($val['tmp_name'])){
echo "不是通过httppost传输的";
return 3;
}
$realName = $year.$mon.$day.time().$val['name'];
$destination = $path."/".$realName;
if(move_uploaded_file($val['tmp_name'], $destination)){
$isUp = scpUploadFile($host,$user,$password,$destination,'/upload/'.$realName);
if(!$isUp){
return 4;
}
$uploadedFiles[$i]['img']='/upload/'.$realName;
$i++;
}
}else {
echo '上传失败';
return 5;
}
}
return $uploadedFiles;
}

安装SSH2拓展 PHP上传文件到远程服务器的更多相关文章

  1. C# 上传文件至远程服务器

    C# 上传文件至远程服务器(适用于桌面程序及web程序) 2009-12-30 19:21:28|  分类: C#|举报|字号 订阅     最近几天在玩桌面程序,在这里跟大家共享下如何将本地文件上传 ...

  2. ASP.NET上传文件到远程服务器(HttpWebRequest)

    /// <summary> /// 文件上传至远程服务器 /// </summary> /// <param name="url">远程服务地址 ...

  3. php - ftp 上传文件到远程服务器

    ccentos7服务器 ======================== 一.安装vsftpd及ftp命令 yum install vsftpd -y yum install ftp -y 二.vsf ...

  4. scp上传文件到远程服务器

    scp -P 22 E:/download/2028792_www.yeves.cn_nginx/cloud.pem root@ip:/usr/local/src

  5. PHP 上传文件到其他服务器

    PHP 上传文件到其他服务器 标签(空格分隔): 安装Guzzle类库 **guzzle** 是发送网络请求的类库 composer安装:**composer require guzzlehttp/g ...

  6. asp.net 服务器 上传文件到 FTP服务器

    private string ftpServerIP = "服务器ip";//服务器ip private string ftpUserID = "ftp的用户名" ...

  7. 在C#客户端用HTTP上传文件到Java服务器

    在C#客户端用HTTP上传文件到Java服务器  来源:http://www.cnblogs.com/AndyDai/p/5135294.html 最近在做C / S 开发,需要在C#客户端上传文件到 ...

  8. .Net 上传文件到ftp服务器和下载文件

    突然发现又很久没有写博客了,想起哎呦,还是写一篇博客记录一下吧,虽然自己还是那个渣渣猿. 最近在做上传文件的功能,上传到ftp文件服务器有利于管理上传文件. 前面的博客有写到layui如何上传文件,然 ...

  9. java 上传文件到 ftp 服务器

    1.  java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...

随机推荐

  1. Java NIO 缓冲区

    Java NIO 在JDK1.4的时候引入,主要解决传统IO的一些性能问题.NIO 主要内容包含 Buffer .Channel.Selector等内容,本文主要讲解Buffer相关的内容. Buff ...

  2. golang的数据类型之整型类型

    数据类型: 整数 : int, int32, int64, uint, uint32, uint64 字符串 : string 布尔:bool 浮点:float32 float64 uint 表示无符 ...

  3. 安装go版本

    下载地址(官网):https://golang.org/dl/ 下载地址(国内):https://dl.gocn.io/ 想编译GO,必须先有一个GO的编译器. 创建GO的编译器:[root@node ...

  4. git常用命令总结 git常用命令总结

    git常用命令总结:https://www.cnblogs.com/jackchensir/p/8306448.html 利用git提交代码 一.首先需要下载git 查看电脑是否安装git,打开终端, ...

  5. [BZOJ3626] [LNOI2014]LCA(树链剖分)

    [BZOJ3626] [LNOI2014]LCA(树链剖分) 题面 给出一棵N个点的树,要求支持Q次询问,每次询问一个点z与编号为区间[l,r]内的点分别求最近公共祖先得到的最近公共祖先深度和.N, ...

  6. P2009 跑步

    题目传送门 热烈庆祝SZM黄题破80,绿题破30,蓝题破20!!!(紫题还是2,,,,orz%%%) 非常水的一道最短路,小于等于100果断Floyd,要好好读题,别忘记特判,8分钟基本就能做出来啦~ ...

  7. Java-技术专区-设计模式-reactor模式

    模型:         反应器模式做法是:汽车是乘客访问的主体(Reactor),乘客上车后,到售票员(acceptor)处登记,之后乘客便可以休息睡觉去了,当到达乘客所要到达的目的地后,售票员将其唤 ...

  8. turtle库使用

    turtle库的使用 绘图窗体布局 turtle.setup(width,height,startx,straty) 用来控制窗体的大小与位置,其中后width与height用来控制窗体的大小,sta ...

  9. 使用transporter同步MongoDB数据到es

    由于logstash不支持MongoDB自定义主键导入es,所以使用transporter导入数据. 版本:es5.x,transporter0.25, es6以上不允许一个索引下面多个type,tr ...

  10. Mysql--08 存储引擎

    目录 一.存储引擎简介 二.MySQL自带的存储引擎类型 三.真实企业案例 四.Innodb存储引擎--表空间介绍 一.存储引擎简介  1.文件系统: 1.1 操作系统组织和存取数据的一种机制. 1 ...