FTP download script - проблемче

DownFall

Registered
Здравейте,

Опитвам се да напиша скрипт, който да:
1. се логва към даден FTP сървър.
2. Да изтегля всички файлове от съответната директория в предварително зададена от мен локална такава.
3. Да обходи всички под-директории и да повори действието в т.2.

С първите 2 се справих без проблем, но т.3. се оказа доста проблемна :)
Ето до къде стигнах:

Код:
<?php
class FTP
{
	protected
		$connect,
		$DownloadDir,
		$clientID;
	
	public function __construct($clientID)
	{
		$this -> clientID = $clientID;
		$this -> Login();
		$this -> createDownloadDir();
		$this -> DownloadFiles('./');
	}
	
	public function __destruct()
	{
		if(!empty($this -> connect))
			ftp_close($this -> connect);
	}
	
	protected function Error($File, $Line, $ErrorMsg)
	{
		global $config;
		return str_replace
		(
			array
			(
				'{$IP}',
				'{$PORT}',
				'{$DownloadDir}'
			),
			
			array
			(
				$config['login']['server'],
				(isset($config['login']['port']) AND !empty($config['login']['port'])) ? $config['login']['port'] : 21,
				$this -> downloadDir
			),
			
			$ErrorMsg
		);
	}
	
	protected final function Login()
	{
		global $config, $Lang;
		$this -> connect = ftp_connect($config['login']['server'], (isset($config['login']['port']) AND !empty($config['login']['port'])) ? $config['login']['port'] : 21, $config['login']['timeout']) or die ($this -> Error(__FILE__, __LINE__, $Lang -> LoginError));
		ftp_login($this -> connect, $config['login']['username'], $config['login']['password']);
	}
	
	protected final function ListDirectory($dir = './')
	{
		return ftp_nlist($this -> connect, $dir);
	}
	
	protected final function ftp_is_dir($dir)
	{
		if(@ftp_chdir($this -> connect, $dir))
		{
			@ftp_cdup($this -> connect);
			return true;
		}
		else
			return false;
	}
	
	protected final function createDownloadDir($dir = NULL)
	{
		global $Lang;
		$this -> DownloadDir = sprintf('downloads/%s/%s/%s/%s/%s;%s%s', $this -> clientID, date('Y'), date('m'), date('d'), date('H'), date('i'), $dir);
		if(!@mkdir($this -> DownloadDir, 0, true))
			$this -> Error(__FILE__, __LINE__, $Lang -> FailedCreateLocalDir);
	}
	
	protected final function downloadFiles($dir)
	{
		foreach($this -> ListDirectory($dir) as $List)
		{
			if(!in_array($List, array('.', '..')))
			{
				if($this -> ftp_is_dir($List) === false)
				{
					$LocalFile = sprintf('%s/%s/%s', dirname($_SERVER['SCRIPT_FILENAME']), $this -> DownloadDir, basename($List));
					$RemoteFile = sprintf('%s%s', $dir, basename($List));
					ftp_get($this -> connect, $LocalFile, $RemoteFile, FTP_BINARY);
				}
				else
					$this -> downloadDirectory($List);
			}
		}
	}
	
	protected final function downloadDirectory($dir)
	{
		print_r($this -> ListDirectory($dir));
	}
}
?>

Проблема е, че в downloadDirectory функцията не ми извежда файловете, които се намират в съответната директория.. Естествено не виждам и начин да ги изтегля :)

Ще съм благодарен някой ако подскаже как може да стане :)
Благодаря.
 

Back
Горе