PHP Classes
elePHPant
Icontem

File: ftp.class.php

Recommend this page to a friend!
  Classes of Abdul-Aziz Al-Oraij  >  FTP Folder Copy or Delete  >  ftp.class.php  >  Download  
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
Author: By
Last change: * Code enhancements in copy()
* Added 2 private functions: mkdir() and file_copy()
* Now it is able to copy a single file (instead of folders only).
N-Joy
Date: 9 years ago
Size: 4,893 bytes
 

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, $local, FTP_BINARY)?$this->log("put"):$this->log("put $local in $remote");
       
ftp_site($this->conn_id, $site)?$this->log("site"):$this->log($site);
    }


};
?>