Login   Register  
PHP Classes
elePHPant
Icontem

File: ftp.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Abdul-Aziz Al-Oraij  >  FTP Folder Copy or Delete  >  ftp.class.php  
File: ftp.class.php
Role: Class source
Content type: text/plain
Description: Main Class File
Class: FTP Folder Copy or Delete
Copy or delete directories in a FTP server
 

Contents

Class file image Download
<?php
// ----------------------------------------------------------------------
// Copyright (C) 2007 by Abdul-Aziz Al-Oraij.
// http://aziz.oraij.com/
// ----------------------------------------------------------------------
// LICENSE

// This program is open source product; you can redistribute it and/or
// modify it under the terms of the GNU General Public License (GPL)
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// To read the license please visit http://www.gnu.org/copyleft/gpl.html
// ----------------------------------------------------------------------
// Class Name: FTP Folder Copy/Delete
// Filename:   ftp.class.php
// Original    Author(s): Abdul-Aziz Al-Oraij <aziz.oraij.com>
// Purpose:    Copy to/Delete from FTP folders recursively.
// ----------------------------------------------------------------------
// Bismillah..
class ftp {
    var 
$conn_id;
    var 
$natij=array();
    var 
$orgDir;

    function 
ftp($ftp_server="localhost"){
        
$this->conn_id ftp_connect($ftp_server);
    }
    function 
connect($user$pass$path "/"){
        if(@
ftp_login($this->conn_id$user$pass) ) 
            return 
ftp_nlist($this->conn_id$path);
        else
            return 
false;
    }
    function 
quit($conn_id null ){
        
$conn_id $conn_id ==null $this->conn_id $conn_id ;
        
ftp_quit($conn_id);
    }
    function 
rmAll($dst_dir$debug 0){
        if(!
$dst_dir) {
            return 
false;
            exit;
        }
        
$dst_dir preg_replace("/\\/\$/"""$dst_dir); // remove trailing slash
        
$ar_files ftp_nlist($this->conn_id$dst_dir);
        if (
is_array($ar_files)){ // makes sure there are files
            
if(count($ar_files)==1// if its only a file
                
return ftp_delete($this->conn_id$ar_files[0]);
            else
                foreach (
$ar_files as $st_file){ // for each file 
                    
if ($st_file == "." || $st_file == "..") continue 1;
                    
$fl_file "$dst_dir/$st_file";
                    
$ftp_size ftp_size($this->conn_id$fl_file );
                    if (
$ftp_size == -1){ // check if it is a directory
                        
$this->rmAll($fl_file); // if so, use recursion
                    
}else{
                        if (
$debug 
                            echo 
"File: $fl_file | $ftp_size\n";
                        else
                            
ftp_delete($this->conn_id$fl_file); // if not, delete the file
                    
}
                }
        }
        if (
$debug 
            echo 
"Dir: $dst_dir \n";
        elseif(
count($ar_files)!=1)
            echo @
ftp_rmdir($this->conn_id$dst_dir) ? "$dst_dir deleted!\n":"Can't remove $dst_dir: No such file or directory"// delete empty directories
    
}
    function 
log($result) {
        if (
$result == "print")
            foreach (
$this->natij as $key => $value){
                if (
$key == "site" || $key == "put" || $key == "mkdir")
                    echo 
"<font color=green>$value ".($key=="put"?"Files uploaded":($key=="mkdir"?"Folders created":"Permissions changed"))." successfully.</font>\n";
                else
                    echo 
"<font color=red>Failed to: $value </font>\n";
            }
        else
        
$result == "site" || $result == "put" || $result == "mkdir" $this->natij[$result]++ : $this->natij[] = $result;
    }
    function 
get_mod($dir) {
        
$stat =  stat $dir );
        
$mode substr(decoct ($stat[mode]), -3);
        if (
$mode=="777" $this->log("$dir mode is 777!!");
        return 
$mode;
    }
    function 
copy$local $remote ) {
        if(!
$this->orgDir){
            
$this->orgDir realpath($local);
            if (!
is_dir($local)) {
                
$this->file_copy $local $remote );
                return 
true;
            }else{
                
$local realpath($local)."/";
                if (!@
ftp_chdir($this->conn_id$remote)){
                    
$this->mkdir $local $remote );
                }
            }
        }
        if (
$open opendir($local)) {
                while (
false !== ($file readdir($open))) {
                    if (
$file != "." && $file != "..") {
                        
$remote_file $remote.substr(realpath($local.$file), strlen($this->orgDir));
                        
$local_file $local.$file;
                        if (!
is_dir($local_file)) {
                            
$this->file_copy $local_file $remote_file );
                        } else {
                            
$this->mkdir $local_file $remote_file );
                            
$this->copy($local $file "/" $remote);
                        }
                    }
                }
            
closedir($open);
        }
    }
    function 
mkdir $local $remote ){
        
$site "CHMOD ".$this->get_mod($local).$remote";
        @
ftp_mkdir($this->conn_id$remote)?$this->log("mkdir"):$this->log("mkdir $remote");
        
ftp_site($this->conn_id$site) ? $this->log("site") : $this->log($site);
    }
    function 
file_copy $local $remote ) {
        
$site "CHMOD ".$this->get_mod($local).$remote";
        
ftp_put($this->conn_id$remote$localFTP_BINARY)?$this->log("put"):$this->log("put $local in $remote");
        
ftp_site($this->conn_id$site)?$this->log("site"):$this->log($site);
    }


};
?>