安装SSH2拓展 PHP同步文件到远程服务器

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

环境:php7 linux(ubuntu)

安装php的ssh2扩展

sudo apt-get install libssh2-1-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){
2     $ssh2 = ssh2_connect($host, 22);
3     ssh2_auth_password($ssh2,$user,$password);
4     //从远程服务器下载文件
5     $stream=ssh2_scp_revc($ssh2, $remote_file, $local_file);
6     return $stream;
7 }

上述连接及身份认证方式 可换为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;
 }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 8,970评论 0 13
  • 虽然自己的实习经历不甚丰富,但是通过与身边求职朋友的交流、互联网大厂导师的沟通以及自身对于此方面知识的吸纳,...
    羊羽呀阅读 2,379评论 0 1
  • 现在全媒体时代,人人都可以是记者、摄影师,人人都能拍出丰富、耐人寻味的摄影照片。无论是平日随手拍,还是工作要求拍照...
    伊敏儿阅读 247评论 0 4
  • 俺家老太太生日,弟弟和弟妹早早就准备好礼物,可劲的贵的,又让老太太有退掉换钱的冲动,嘻嘻,就这样的弟弟吧,一...
    风筝2017阅读 278评论 0 0
  • 文 胡卓明 图 阿宝 闹闹离开两日了。还记得闹闹来我们家时才两个月不到。那是2004年8月的事。闹闹的生日是200...
    胡卓明阅读 394评论 0 1