Location: PHPKode > scripts > FTP Folder Copy or Delete > ftp-folder-copy-or-delete/ftp.class.php
<?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);
	}


};
?>
Return current item: FTP Folder Copy or Delete