开发者社区> 吕亚辉> 正文

上传文件到服务器端后进一步推送到sftp服务器

简介: 扩展安装 要想sftp服务端发送文件,就需要php脚本具有作为ssh客户端的能力,所以需先为php安装如下扩展 openssl openssl-dev libssh php ssh 扩展 按照下面的命令进行安装 1 rpm -qa | grep openssl 2 wget http://www.
+关注继续查看

扩展安装

要想sftp服务端发送文件,就需要php脚本具有作为ssh客户端的能力,所以需先为php安装如下扩展

  • openssl
  • openssl-dev
  • libssh
  • php ssh 扩展

按照下面的命令进行安装

 1 rpm -qa | grep openssl
 2 wget http://www.libssh2.org/download/libssh2-1.6.0.tar.gz
 3 tar zxvf llibssh2-1.6.0.tar.gz
 4 cd libssh2-1.6.0
 5 ./configure
 6 make && make install
 7 wget http://pecl.php.net/get/ssh2-0.11.3.tgz
 8 tar xvf ssh2-0.11.3.tgz
 9 cd ssh2-0.11.3
10 phpize
11 ./configure --with-ssh2
12 make
13 cp modules/ssh2.so /alidata/server/php-5.4.23/lib/php/extensions/no-debug-non-zts-20100525
14 echo 'extension=ssh2.so' >> /alidata/server/php-5.4.23/etc/php.ini
15 service nginx restart
16 php -i | grep ssh2

服务器软件安装路径需要根据实际情况修改

php推送脚本

注意这里服务端已经处理完文件上传,这个推送的部分可以另起一个线程或进程去推送

 1 public function proccessFile($destinationPath, $filename)
 2 {
 3 //parent::proccessFile($destinationPath, $filename); // TODO: Change the autogenerated stub
 4 
 5   $remoteBasePath = '/mnt/java/pipeline/ads/upload/';
 6   $localBasePath = '/alidata/www/aft/';
 7   $connection = ssh2_connect('XXX.XXX.XXX.XXX', 22);
 8   ssh2_auth_password($connection, 'username', 'password');
 9   /*
10   $sftp = ssh2_sftp($connection);
11   SiteHelpers::PE($sftp);
12   $resFile = fopen("ssh2.sftp://$sftp/mnt/java/pipeline/ads/upload", 'w');
13   $srcFile = fopen('/alidata/www/aft/'.$destinationPath.'/'.$filename,'r');
14   $writtenBytes = stream_copy_to_stream($srcFile, $resFile);
15   fclose($resFile);
16   fclose($srcFile);
17   */
18   $dateDir = date("Y-m/d",strtotime("-1 day"));
19 //    SiteHelpers::PE($remoteBasePath.$dateDir.'/'.$filename);
20 //    $sftp = ssh2_sftp($connection);
21 //    ssh2_sftp_mkdir($sftp,$remoteBasePath.$dateDir);
22   ssh2_exec($connection,'mkdir -p '.$remoteBasePath.$dateDir);
23   ssh2_scp_send($connection,
24      $localBasePath.$destinationPath.'/'.$filename,
25      $remoteBasePath.$dateDir.'/'.$filename);
26 
27   Log::info('处理了投放数据');
28   Log::info($destinationPath.'/'.$filename);
29 }

可以看到最后文件成功推送到sftp服务器

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
关于FileZilla上传文件后服务器端文件与本地文件大小不一致的解决方法
最近在调试网站时发现,通过ftp上传工具FileZilla上传至服务器端的文件与本地文件大小不一致,虽然没有影响网站的最终显示效果,但仍让我困惑不解。后发现是传输类型的原因,解决方法如下: 中文版FileZilla菜单栏->传输->传输类型->二进制(Binary) 造成大小不一致的原因:ASCII模式和二进制(Binary)模式的区别是回车换行的处理,Binary模式不对数据进行任何处理,ASCII模式将回车换行转换为本机的回车字符,比如:UNIX下是\n,Windows下是\r\n,Mac下是\r。
1555 0
ftp+nginx实现文件服务器
为什么要有文件服务器呢,如果把文件存放到web容器下肯定不是好的办法,因为你时刻需要注意覆盖后文件消失的问题。如果想完全的搬出web容器,项目不大的话我们可以选择ftp+nginx的方式来实现文件服务器。
1725 0
上传文件到服务器端后进一步推送到sftp服务器
扩展安装 要想sftp服务端发送文件,就需要php脚本具有作为ssh客户端的能力,所以需先为php安装如下扩展 openssl openssl-dev libssh php ssh 扩展 按照下面的命令进行安装 1 rpm -qa | grep openssl 2 wget http://www.
988 0
Day1-基于ECS的FTP-Vsftpd服务
云服务器(Elastic Compute Service,简称ECS)是阿里云提供的弹性计算服务。基于它,可以用来配置FTP服务器;其中,FTP(File Transfer Protocol)文件传输协议是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议。依照该协议,可以用来提供文件存储和访问服务。而基于该协议,发展出了vsftpd,它是一款在Linux发行版中最受欢迎的FTP服务器,它具有非常高的安全性需求、带宽限制、良好的可伸缩性和速率高等特点。
206 0
+关注
吕亚辉
主做Java 后台开发,熟悉并发与网络编程。乐于分享,爱钻研问题,喜欢技术上的挑战,属复合型开发工程师,擅长后端开发,也有一定web前端开发经验,曾独立开发多个项目,独立与全栈开发能力强。
81
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载