安装SSH2拓展 PHP上传文件到远程服务器详解编程语言

本文章主要介绍了安装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  函数

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

A从B下载文件 函数

1 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密钥链接 

1 $ssh2 = ssh2_connect('shell.example.com', 22, array('hostkey'=>'ssh-rsa')); 
2  
3 if (ssh2_auth_pubkey_file($connection, 'username', 
4                           '/home/username/.ssh/id_rsa.pub', 
5                           '/home/username/.ssh/id_rsa', 'secret')) { 
6   echo "Public Key Authentication Successful/n"; 
7 } else { 
8   die('Public Key Authentication Failed'); 
9 }

 

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

多图片上传数组处理

 1 function buildImgArray($_FILES){ 
 2     $i = 0; 
 3     foreach ($files as $v){//三维数组转换成2维数组 
 4         if(is_string($v['name'])){ //单文件上传 
 5             $info[$i] = $v; 
 6             $i++; 
 7         }else{ // 多文件上传 
 8             foreach ($v['name'] as $key=>$val){//2维数组转换成1维数组 
 9                 //取出一维数组的值,然后形成另一个数组 
10                 //新的数组的结构为:info=>i=>('name','size'.....) 
11                 $info[$i]['name'] = $v['name'][$key]; 
12                 $info[$i]['size'] = $v['size'][$key]; 
13                 $info[$i]['type'] = $v['type'][$key]; 
14                 $info[$i]['tmp_name'] = $v['tmp_name'][$key]; 
15                 $info[$i]['error'] = $v['error'][$key]; 
16                 $i++; 
17             } 
18         } 
19     } 
20     return $info; 
21 }

上传至A并同步上传至B

 1 function uploadFile($files,$host,$user,$password,$maxSize=1048576,$imgFlag=true){ 
 2     $date = getdate(time()); 
 3     $year = $date['year']; 
 4     $mon = $date['mon']; 
 5     $day = $date['mday']; 
 6     $path = 'upload/'; 
 7     if (! is_dir($path)) { 
 8         mkdir($path,0777,true); 
 9     } 
10     $i = 0; 
11     foreach ($files as $val) { 
12         if ($val['error'] == 0) { 
13             if($val['size']>$maxSize){ 
14                 echo "文件太大了"; 
15                 return 1; 
16             } 
17             if($imgFlag){ 
18                 $result = getimagesize($val['tmp_name']); 
19                 if(!$result){ 
20                     echo "您上传的不是一个真正图片"; 
21                     return 2; 
22                 } 
23             } 
24             if(!is_uploaded_file($val['tmp_name'])){ 
25                 echo "不是通过httppost传输的"; 
26                 return 3; 
27             } 
28             $realName = $year.$mon.$day.time().$val['name']; 
29             $destination = $path."/".$realName; 
30             if(move_uploaded_file($val['tmp_name'], $destination)){ 
31                 $isUp = scpUploadFile($host,$user,$password,$destination,'/upload/'.$realName); 
32                 if(!$isUp){ 
33                     return 4; 
34                 } 
35                 $uploadedFiles[$i]['img']='/upload/'.$realName; 
36                 $i++; 
37             } 
38         }else { 
39             echo '上传失败'; 
40             return 5; 
41         } 
42     } 
43     return $uploadedFiles; 
44 }

原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/228239.html

(0)
上一篇 2022年1月11日
下一篇 2022年1月11日

相关推荐

发表回复

登录后才能评论