天天看點

php ftp類,PHP的ftp檔案,多檔案上傳操作類

PHP針對ftp檔案的操作方法,如果是隻操作一個ftp,可以使用裡面的單利模式,

不需要每次都去執行個體化,我的項目中需要去連結很多個ftp伺服器;

是以需要多次去連接配接和關閉;<?php

namespace App\Tools;

class FtpFile

{

static private $_instance=null;

private $ftp = null;

public $off;             // 傳回操作狀态(成功/失敗)

//私有的構造方法

public  function __construct($config){

//執行個體化

$this->ftp = @ftp_connect($config['ftp_ip'],$config['ftp_port']) or die("FTP connection fail");

//登入驗證

@ftp_login($this->ftp,$config['ftp_username'],$config['ftp_password']);

//是否開啟被動模式

if (isset($config['ftp_pasv']))

{

@ftp_pasv($this->ftp,true);

}

}

static public function getInstance($config){

if(!(self::$_instance instanceof self)){

self::$_instance = new FtpFile($config);

}

return self::$_instance;

}

function up_file($path,$newpath,$type=true)

{

if($type) $this->dir_mkdirs($newpath);

$this->off = @ftp_put($this->ftp,$newpath,$path,FTP_BINARY);

if(!$this->off)

{

return "檔案上傳失敗,請檢查權限及路徑是否正确!";

}else{

//删除檔案

unlink($path);

return true;

}

}

public function uploadFile($files=[],$type=true)

{

if (is_array($files))

{

foreach ($files as $key=>$file)

{

if($type)

{

$this->dir_mkdirs($file);

}

$this->off = @ftp_put($this->ftp,$file,$key,FTP_BINARY);

if(!$this->off)

{

logs('ftp.txt',date('Y-m-d H:i:s').$file."檔案上傳錯誤");

}else{

//删除檔案

unlink($key);

// return true;

}

}

}

if(!$this->off)

{

//logs函數自定義日志

logs('ftp.txt',date('Y-m-d H:i:s').$file."檔案上傳錯誤");

return false;

}else{

return true;

}

}

function move_file($path,$newpath,$type=true)

{

if($type) $this->dir_mkdirs($newpath);

$this->off = @ftp_rename($this->ftp,$path,$newpath);

if(!$this->off) {

return "檔案移動失敗,請檢查權限及原路徑是否正确!";

}else{

return true;

}

}

function copy_file($path,$newpath,$type=true)

{

$downpath = "/var/www/temp.txt";

$this->off = @ftp_get($this->ftp,$downpath,$path,FTP_BINARY);// 下載下傳

if(!$this->off)

{

return "檔案複制失敗,請檢查權限及原路徑是否正确!";

}

$this->up_file($downpath,$newpath,$type);

}

function del_file($path)

{

$this->off = @ftp_delete($this->ftp,$path);

if(!$this->off){

return false;

}

}

function dir_mkdirs($path)

{

$path_arr = explode('/',$path);       // 取目錄數組

$file_name = array_pop($path_arr);      // 彈出檔案名

$path_div = count($path_arr);        // 取層數

foreach($path_arr as $val)          // 建立目錄

{

if(@ftp_chdir($this->ftp,$val) == FALSE)

{

$tmp = @ftp_mkdir($this->ftp,$val);

if($tmp == FALSE)

{

exit;

}

@ftp_chdir($this->ftp,$val);

}

}

for($i=1;$i<=$path_div;$i++)         // 回退到根

{

@ftp_cdup($this->ftp);

}

}

public function close()

{

@ftp_close($this->ftp);

}

public function __destruct()

{

// TODO: Implement __destruct() method.

//@ftp_close($this->ftp);

}

}

lavarel中直接調用;

單例模式調用:FtpFile::getInstance($this->data)->up_file($location_file,$remote_file);

不是單例模式調用;$ftp = new FtpFile($this->data);

$ftp->uploadFile($filearr);

$ftp->close();