thinkphp5获取ftp上的文件列表

Posted zrn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp5获取ftp上的文件列表相关的知识,希望对你有一定的参考价值。

引入ftp类

<?php
/**
 * 仿写CodeIgniter的FTP类
 * FTP基本操作:
 * 1) 登陆;           connect
 * 2) 当前目录文件列表;  filelist
 * 3) 目录改变;         chgdir

 *
 * @author quanshuidingdang
 */
class Ftp {

    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 function close() {
        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."]
", FILE_APPEND);
    }
}

放在vendor文件夹下,调用时页面上:

public function index(){
        set_time_limit(0);
        ini_set(‘memory_limit‘,‘-1‘);
        $config=array(
            ‘hostname‘=>‘127.0.0.1‘,  //ip
            ‘username‘=>‘root‘,
            ‘password‘=>‘root‘,
            ‘port‘=>‘21‘,  //端口号
        );
        vendor(‘ftp‘);
        $ftp=new Ftp();
        $conn=$ftp->connect($config);
        $res=$ftp->filelist(‘file_name‘);  //需要获取的文件夹名称
     return $res;
}

 



 






以上是关于thinkphp5获取ftp上的文件列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用PHP在ftp服务器上获取文件大小?

一旦单击带有 in 片段的回收器列表项,如何将片段意向活动,以及如何获取回收器项目值?

java Ftp上传创建多层文件的代码片段

用JAVA获取FTP文件列表

在 R 中列出 HTTP/FTP 服务器上的文件

获取FTP目录中的所有文件