php实现sftp上传文件,PHP-sftp文件上传

PHP的sftp文件上传;在框架thinkphp5中使用;

主要用到的sftp函数如下;

ssh2_connect(host,port) 链接信息

ssh2_auth_password($con,username,password)登录验证

copy();//服务器之间的文件复制;

要求如下

需要的文件字段信息见附件内容,注意最后一列带年月日时分秒格式;

上传前,需要先判断相应目录下是否有上一天日期文件夹,若无,则创建,若有,则直接上传至相应文件夹下,如附件所示

thinkphp5中提供了一个非composer安装的第三方类库目录extend

在extend目录下创建一个sftp目录创建sftp.php的类namespace sftp;

class Sftp

{

// 初始配置为NULL

private $config = NULL;

// 连接为NULL

private $conn = NULL;

//sftp resource

private $ressftp = NULL;

// 初始化

public function __construct($config)

{

$this->config = $config;

$this->connect();

}

public function connect()

{

$this->conn = ssh2_connect($this->config['host'], $this->config['port']);

if( ssh2_auth_password($this->conn, $this->config['username'], $this->config['password']))

{

$this->ressftp = ssh2_sftp($this->conn);

}else{

echo "用户名或密码错误";

}

}

// 下载文件

public function downftp($remote, $local)

{

return copy("ssh2.sftp://{$ressftp}".$remote, $local);

}

// 文件上传

public function upftp( $local,$remote, $file_mode = 0777)

{

return copy($local,"ssh2.sftp://{$this->ressftp}".$remote);

}

//创建目录

public function ssh2_sftp_mchkdir($path)  //使用创建目录循环

{

ssh2_sftp_mkdir($this->ressftp, $path,0777);

}

//判段目录是否存在

public function ssh2_dir_exits($dir){

return file_exists("ssh2.sftp://{$this->ressftp}".$dir);

}

}

下面在控制器里面调用namespace app\index\controller;

use think\Controller;

use \sftp\sftp;

class Index extends Controller

{

public function index()

{

ini_set('max_execution_time','0');//设置永不超时

$time = date('ymd',time()-24*3600);//上一天的日期

$name = "mac".$time;

$data = db('table')->where("add_date='2017-10-09'")->select();//查询数据

$fp = fopen("$name.csv","a"); //打开csv文件,如果不存在则创建

$datastr = 'id,sitecode,devmac,stamac,add_date,up_time'."\r\n";

foreach ($data as $key => $value) {

# code...

$datastr = $datastr.$value['id'].$value['sitecode'].','.$value['devmac'].

','.$value['stamac'].','.$value['add_date'].','.$value['up_time']."\r\n";

}

//iconv('GB2312','UTF-8//IGNORE',$datastr)

fwrite($fp,$datastr); //写入数据讲gbk转成utf8

fclose($fp); //关闭文件句柄

echo "生成成功";

$config = array(

'host'=>'127.0.0.1',

'username'=>'root',

'password'=>'root',

'port'=>'22'

);

$sftp = new sftp($config);

$re = $sftp->ssh2_dir_exits("/test/$time");

if($re){//如果目录存在直接上传

$sftp->upftp("$name.csv",'/test/'.$time.'/'.$name.'.csv');

}else{

$sftp->ssh2_sftp_mchkdir('/test/'.$time);

$sftp->upftp("$name.csv",'/test/'.$time.'/'.$name.'.csv');

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值