6Июнь/11Off
Класс для работы с FTP
В рамках собственного фреймворка (GMFramework) когда-то был написан простенький класс для работы с ftp.
/**
* Класс для работы с ftp
* @package ru.vbinc.gm.framework.net
* @author GreyMag
* @copyright 2009
* @version 0.1
* @access public
*/
class FTP
{
const MODE_FTP_ASCII = FTP_ASCII;
const MODE_FTP_BINARY = FTP_BINARY;
public $error;
private $_connect;
/**
* FTP
* Класс для работы с FTP
* @param string $host имя хоста
* @param string $login имя пользователя ftp
* @param string $pass пароль пользователя ftp
* @param integer $port номер порта, через который осуществляется соединение
* @param integer $timeout максимально время выполнения сценария
* @return void
*/
function __construct( $host, $login = '', $pass = '', $port = 21, $timeout = 90 )
{
$port = (int)$port;
$timeout = (int)$timeout;
$this->_connect = ftp_connect( $host, $port, $timeout );
if( !$this->checkConnect() ) return false;
if( $login != '' ) ftp_login( $this->_connect, $login, $pass );
}
/**
* FTP::put()
* Загрузить файл на удалённый сервер
* @param string $remoteFile имя на удалённом сервере
* @param string $localFile имя на локальном сервере
* @param integer $mode режим передачи
* @param integer $startPos начальная позиция
* @return bool
*/
public function put( $remoteFile, $localFile, $mode, $startPos = 0 )
{
if( !$this->checkConnect() ) return false;
$mode = $this->checkMode( $mode );
$startPos = (int)$startPos;
if( ftp_put( $this->_connect, $remoteFile, $localFile, $mode, $startPos ) ) return true;
else {
$this->error = "Ошибка загрузки файла";
return false;
}
}
/**
* FTP::fPut()
* Чтение и загрузка файла на сервер
* @param mixed $remoteFile
* @param integer $openFile дескриптор открытого файла
* @param integer $mode режим передачи
* @return
*/
public function fPut( $remoteFile, $openFile, $mode )
{
if( !$this->checkConnect() ) return false;
$mode = $this->checkMode( $mode );
if( ftp_fput( $this->_connect, $remoteFile, $openFile, $mode ) ) return true;
else {
$this->error = "Ошибка загрузки открытого файла";
return false;
}
}
/**
* FTP::mkDir()
* Создание директории
* @param string $directory имя создаваемой директории
* @return имя созданной директории или false в случае ошибки
*/
public function mkDir( $directory )
{
if( !$this->checkConnect() ) return false;
if( $name = ftp_mkdir( $this->_connect, $directory ) ) return $name;
else {
$this->error = "Ошибка создания директории";
return false;
}
}
/**
* FTP::close()
* Закрываем соединение
* @return void
*/
public function close()
{
if( $this->checkConnect() ) ftp_quit( $this->_connect );
}
/**
* FTP::checkConnect()
* Проверка соединения
* @return bool
*/
protected function checkConnect()
{
if( !$this->_connect )
{
$this->error = "Ошибка соединения";
return false;
}
else return true;
}
/**
* FTP::checkMode()
* Проверка режима
* @param integer $mode проверяемый режим
* @return integer режим
*/
protected function checkMode( $mode )
{
switch( $mode )
{
case FTP::MODE_FTP_ASCII :
case FTP::MODE_FTP_BINARY : return $mode;
default : return FTP::MODE_FTP_ASCII;
}
}
}
Здесь приведены только базовый функции, которые были мне необходимы в момент написания.