Login   Register  
PHP Classes
elePHPant
Icontem

File: adv_ftp.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Tomasz Malewski  >  ADV_FTP  >  adv_ftp.php  >  Download  
File: adv_ftp.php
Role: Class source
Content type: text/plain
Description: Main class adv_ftp source code
Class: ADV_FTP
List the files in a FTP server recursively
Author: By
Last change: add Windows_NT support
Date: 3 years ago
Size: 3,206 bytes
 

Contents

Class file image Download
<?

/**
 * ADV_FTP a simple PHP spider class to indexing remote recursive directory and handy to put MySQL .
 * Support now UNIX and Windows_NT FTP filesystem.
 * 2011-07-31 Tomasz Malewski - varsovie (nospam) o2.pl 
 */
class adv_ftp {
    
    function 
adv_ftp () {
        
$this->level 1;
        
$this->pwd "";
        }    
// adv_ftp init

    // Estabilish connection
    
public function conn($hostname$username$password) {
        
$this->hostname=$hostname;
        
$this->username=$username;
        
$this->password=$password;
        
$this->conn_id ftp_connect($this->hostname);     
        
$login_result ftp_login($this->conn_id$this->username$this->password); 
        
ftp_pasv($this->conn_idtrue); 
        
$this->systype ftp_systype($this->conn_id);        // Estimate FTP System type to analyze date
//        if ((!$conn_id) || (!$login_result)) { echo " *** ADV_FTP : Unable to connect <br>\r\n";    }
        
}    // conn end

    // Classid dir for FTP , return array $this->dir
    
public function listFiles() {
//        $buff = ftp_rawlist($this->conn_id, '.', true);        // recursive dir  3rd parameter PHP 4.3
        
$buff ftp_rawlist($this->conn_id'.');
//        var_dump($buff); 
        
$this->pwd ftp_pwd($this->conn_id);
        foreach (
$buff as $line) {
            switch (
$this->systype) {        // select UNIX or Windows NT FTP remote

                
case "UNIX":
                
$finfo preg_split("/[\s]+/"$line9);
                if (
$finfo[0] !== "total") {
//                    print_R ($finfo);
                    
$filepath $this->hostname."".$this->pwd."/".$finfo[8];
                    
$this->dir[$filepath][filename] = $finfo[8];
                    
$this->dir[$filepath][dir] = $this->pwd;
                    
$this->dir[$filepath][date] = strtotime("$finfo[5] $finfo[6] $finfo[7]");
                    
$this->dir[$filepath][size] = $finfo[4];
                    if (
preg_match("/^d/",$finfo[0])) { $this->dir[$filepath][isdir]='1';}
                    }    
// if vinfo != 0
                
break;

                case 
"Windows_NT":
                
ereg("([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|<DIR>) +(.+)",$line,$finfo);
                
$filepath $this->hostname."".$this->pwd."/".$finfo[8];
                
$this->dir[$filepath][filename] = $finfo[8];
                
$this->dir[$filepath][dir] = $this->pwd;
                
$this->dir[$filepath][isdir] = ($finfo[7]=="<DIR>");
                
$this->dir[$filepath][date] = strtotime($finfo[1]."/".$finfo[2]."/".$finfo[3]);
                
$this->dir[$filepath][size] = $finfo[7];
//                print_r ($finfo);

                
break;

                }    
// switch systype
            
}    // line
        
}    // listfiles end

    // recursive dir. changeDir should be execute before to set start point. Don't forget to set $this->level
    
function recursive($directory,$level)    {
        
ob_end_flush(); ob_flush(); flush(); ob_start(); 
        if (
$directory == FALSE $directory $this->pwd;
        if (
$level <= $this->level)
            {
            
$this->changeDir("".$directory);
            
$this->listfiles();
//             print_R ($this->dir);
            
foreach ($this->dir as $filename=>$key) {
                if (
$key[isdir]==1) {$newlevel=$level+1;$this->recursive($key[dir]."/".$key[filename]."",$newlevel);}

                }        
// each dir
            
}    // white level
        
}    // recursive end

    
public function changeDir($dir) {
        
ftp_chdir($this->conn_id"/".$dir);
        
$this->pwd=$dir;
        }    
// changeDir

    
public function close() {
        
ftp_close($conn_id); 
        }    
// close end


    
}    // adv_ftp end