PHP Classes

File: adv_ftp.php

Recommend this page to a friend!
  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: 12 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_id, true);
       
$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]+/", $line, 9);
                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