安装SSH2拓展 PHP上传文件到远程服务器
情景:客户端上传图片到服务器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上传文件到远程服务器的更多相关文章
- C# 上传文件至远程服务器
C# 上传文件至远程服务器(适用于桌面程序及web程序) 2009-12-30 19:21:28| 分类: C#|举报|字号 订阅 最近几天在玩桌面程序,在这里跟大家共享下如何将本地文件上传 ...
- ASP.NET上传文件到远程服务器(HttpWebRequest)
/// <summary> /// 文件上传至远程服务器 /// </summary> /// <param name="url">远程服务地址 ...
- php - ftp 上传文件到远程服务器
ccentos7服务器 ======================== 一.安装vsftpd及ftp命令 yum install vsftpd -y yum install ftp -y 二.vsf ...
- scp上传文件到远程服务器
scp -P 22 E:/download/2028792_www.yeves.cn_nginx/cloud.pem root@ip:/usr/local/src
- PHP 上传文件到其他服务器
PHP 上传文件到其他服务器 标签(空格分隔): 安装Guzzle类库 **guzzle** 是发送网络请求的类库 composer安装:**composer require guzzlehttp/g ...
- asp.net 服务器 上传文件到 FTP服务器
private string ftpServerIP = "服务器ip";//服务器ip private string ftpUserID = "ftp的用户名" ...
- 在C#客户端用HTTP上传文件到Java服务器
在C#客户端用HTTP上传文件到Java服务器 来源:http://www.cnblogs.com/AndyDai/p/5135294.html 最近在做C / S 开发,需要在C#客户端上传文件到 ...
- .Net 上传文件到ftp服务器和下载文件
突然发现又很久没有写博客了,想起哎呦,还是写一篇博客记录一下吧,虽然自己还是那个渣渣猿. 最近在做上传文件的功能,上传到ftp文件服务器有利于管理上传文件. 前面的博客有写到layui如何上传文件,然 ...
- java 上传文件到 ftp 服务器
1. java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...
随机推荐
- [已解决]报错: Error response from daemon: conflict
报错内容: Error response from daemon: conflict: unable to delete f5b6ef70d79b (must be forced) - image i ...
- 洛谷 P5019 铺设道路 & [NOIP2018提高组](贪心)
题目链接 https://www.luogu.org/problem/P5019 解题思路 一道典型的贪心题. 假设从左往右填坑,如果第i个深与第i+1个,那么第i+1个就不需要额外填: 如果第i+1 ...
- 2.openshift授权策略和scc理解
policy管理概念 查看policy的方式可以通过cli进行查看 Roles grant various levels of access in the system-wide cluster po ...
- Java 小技巧和在Java避免NullPonintException的最佳方法(翻译)
前几天就g+里面看到有人引用这篇博文.看了一下.受益颇多. 所以翻译过来,希望和大家一起学习.本人英语水平有限,假设有错,请大家指正. 原文地址(须要翻墙):http://ja ...
- pytest--命令行参数
使用pytest --help可以查看全部选项 -v:pytest -v 说明:可以输出用例更加详细的执行信息,比如用例所在的文件及用例名称等 -q(--quiet) 该选项的作用与-v/--ve ...
- 使用git、git-flow与gitlab工作
使用git.git-flow与gitlab工作 1. 摘要 在工作中使用git代替svn也有一段时间了,对于git的一些特性喜爱的同时也一直遇到相同的问题:“这时候应该打什么命令?”.相对于svn或者 ...
- 202-基于TI DSP TMS320C6678、Xilinx K7 FPGA XC72K325T的高速数据处理核心板
基于TI DSP TMS320C6678.Xilinx K7 FPGA XC72K325T的高速数据处理核心板 一.板卡概述 该DSP+FPGA高速信号采集处理板由我公司自主研发,包含一片TI DSP ...
- 8VC Venture Cup 2017 - Elimination Round - C
题目链接:http://codeforces.com/contest/755/problem/C 题意:PolandBall 生活在一个森林模型的环境中,定义森林由若干树组成,定义树为K个点,K-1条 ...
- html5 jquery音乐播放器,play()和pause()不起作用
今天在自己写的页面上加上背景音乐,当我点击图片时可以切换 播放/暂停 用jquery写的,方法总是提示没有pause这个方法! 检查了半天最后发现 你使用的是jquery选择器所以返回的是jquery ...
- SQL回顾1
1.学生表Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CID,Cname,T ...