Здравейте,
Опитвам се да напиша скрипт, който да:
1. се логва към даден FTP сървър.
2. Да изтегля всички файлове от съответната директория в предварително зададена от мен локална такава.
3. Да обходи всички под-директории и да повори действието в т.2.
С първите 2 се справих без проблем, но т.3. се оказа доста проблемна
Ето до къде стигнах:
Проблема е, че в downloadDirectory функцията не ми извежда файловете, които се намират в съответната директория.. Естествено не виждам и начин да ги изтегля
Ще съм благодарен някой ако подскаже как може да стане
Благодаря.
Опитвам се да напиша скрипт, който да:
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 функцията не ми извежда файловете, които се намират в съответната директория.. Естествено не виждам и начин да ги изтегля
Ще съм благодарен някой ако подскаже как може да стане
Благодаря.