Just Blog about nothing

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;
		}
	}
}

Здесь приведены только базовый функции, которые были мне необходимы в момент написания.

См. http://ru2.php.net/manual/en/book.ftp.php

Метки записи: , , Комментарии
Комментарии (0) Пинги (0)

Извините, комментировать здесь запрещено.

Trackbacks are disabled.

Social Widgets powered by AB-WebLog.com.