php ftp获取文件列表,thinkphp5获取ftp上的文件列表

* 仿写CodeIgniter的FTP类

* FTP基本操作:

* 1) 登陆; connect

* 2) 当前目录文件列表; filelist

* 3) 目录改变; chgdir

*

* @author quanshuidingdang*/

classFtp {private $hostname = '';private $username = '';private $password = '';private $port = 21;private $passive = TRUE;private $debug = TRUE;private $conn_id = FALSE;/**

* 构造函数

*

* @param array 配置数组 : $config = array('hostname'=>'','username'=>'','password'=>'','port'=>''...);*/

public function __construct($config = array()) {if(count($config) > 0) {$this->_init($config);

}

}/**

* FTP连接

*

* @access public

* @param array 配置数组

* @return boolean*/

public function connect($config = array()) {if(count($config) > 0) {$this->_init($config);

}if(FALSE === ($this->conn_id = @ftp_connect($this->hostname,$this->port))) {if($this->debug === TRUE) {$this->_error("ftp_unable_to_connect");

}return FALSE;

}if( ! $this->_login()) {if($this->debug === TRUE) {$this->_error("ftp_unable_to_login");

}return FALSE;

}if($this->passive === TRUE) {ftp_pasv($this->conn_id, TRUE);

}return TRUE;

}/**

* 获取目录文件列表

*

* @access public

* @param string 目录标识(ftp)

* @return array*/

public function filelist($path) {if( ! $this->_isconn()) {return FALSE;

}return @ftp_nlist($this->conn_id, $path);

}//递归查询所有目录下的文件

public function dir_switch($path = null){路径

$path = empty($path)?'.':$path;//查看目录文件

$catalog = $this->filelist($path);//return $catalog;

$list = array();$info = array();if($catalog){//递归查

foreach ($catalog as $val){//判断是否是为目录

if($this->isFtpDir($val)){$info = $this->dir_switch($val);if($info){foreach ($info as $v){$list[] = $v;

}

}

}else{$list[] = $val;

}//sleep(1);

}return $list;

}

}/**

* 目录改变

*

* @access public

* @param string 目录标识(ftp)

* @param boolean

* @return boolean*/

public function chgdir($path = '', $supress_debug = FALSE)

{if ($path == '' OR !$this->_isconn()) {return FALSE;

}$result = @ftp_chdir($this->conn_id, $path);if ($result === FALSE) {if ($this->debug === TRUE AND $supress_debug == FALSE) {$this->_error("ftp_unable_to_chgdir:dir[" . $path . "]");

}return FALSE;

}return @ftp_pwd($this->conn_id);//return TRUE;

}//查看文件是否存在

function isFtpDir($filename)

{if(ftp_size($this->conn_id,$filename)!=-1)

{return false;

}else{return true;

}

}/**

* 关闭FTP

*

* @access public

* @return boolean*/

public functionclose() {if( ! $this->_isconn()) {return FALSE;

}return @ftp_close($this->conn_id);

}/**

* FTP成员变量初始化

*

* @access private

* @param array 配置数组

* @return void*/

private function _init($config = array()) {foreach($config as $key => $val) {if(isset($this->$key)) {$this->$key = $val;

}

}//特殊字符过滤

$this->hostname = preg_replace('|.+?://|','',$this->hostname);

}/**

* FTP登陆

*

* @access private

* @return boolean*/

private function_login() {return @ftp_login($this->conn_id, $this->username, $this->password);

}/**

* 判断con_id

*

* @access private

* @return boolean*/

private function_isconn() {if( ! is_resource($this->conn_id)) {if($this->debug === TRUE) {$this->_error("ftp_no_connection");

}return FALSE;

}return TRUE;

}/**

* 从文件名中获取后缀扩展

*

* @access private

* @param string 目录标识

* @return string*/

private function _getext($filename) {if(FALSE === strpos($filename, '.')) {return 'txt';

}$extarr = explode('.', $filename);return end($extarr);

}/**

* 从后缀扩展定义FTP传输模式 ascii 或 binary

*

* @access private

* @param string 后缀扩展

* @return string*/

private function _settype($ext) {$text_type = array('txt',

'text',

'php',

'phps',

'php4',

'js',

'css',

'htm',

'html',

'phtml',

'shtml',

'log',

'xml');return (in_array($ext, $text_type)) ? 'ascii' : 'binary';

}/**

* 错误日志记录

*

* @access prvate

* @return boolean*/

private function _error($msg) {return @file_put_contents('ftp_err.log', "date[".date("Y-m-d H:i:s")."]-hostname[".$this->hostname."]-username[".$this->username."]-password[".$this->password."]-msg[".$msg."]\n",FILE_APPEND);

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值