Духовность™
Продвинутый новичок
правильно ли я подхожу к написанию Uploader-a
Пишу класс для загрузки файлов на сайт. Покритикуйте интерфейс, что так а что не так:
Пишу класс для загрузки файлов на сайт. Покритикуйте интерфейс, что так а что не так:
PHP:
class Base_Upload
{
/**
* Принимает значение одного элемента массива $_FILES
*
* @param array
*/
public function __construct(&$file);
/**
* Устанавливает будущее имя загружаемого файла.
* Если имя не указывается, файл будет сохранён с оригинальным именем.
*
* @param string
*/
public function setName($file_name);
/**
* Устанавливает расширение загружаемого файла.
* Если расширение не указывается, файл будет сохранён с оригинальным расширением.
*
* @param string
*/
public function setExt($file_ext);
/**
* Устанавливает максимально-дрпустимый размер файла.
* Значение $size может быть любой формой представления
* человекопонятной нумерации размерности данных, принятых в PHP: 8M, 2B, 30G
*
* @param string
* @return void
*/
public function setMaxSize($size);
/**
* Устанавливает допустимые mime-типы загружаемых файлов.
*
* @param array|string массив или строка - допустимые mime-типы
* @return void
*/
public function setAllowableType($type);
/**
* Возвращает ошибки, если таковые имеются.
*
* @return void|array
*/
public function getErrors();
/**
* Копирует загруженный файл в директорию $directory
*
* @param $directory
*/
public function copy($directory);
}
if (Http_Request::isPost())
{
if (isset($_FILES['my']))
{
foreach ($_FILES['my']['name'] as $id => $__)
{
$file = array
(
'name' => &$_FILES['my']['name'][$id],
'type' => &$_FILES['my']['type'][$id],
'tmp_name' => &$_FILES['my']['tmp_name'][$id],
'error' => &$_FILES['my']['error'][$id],
'size' => &$_FILES['my']['size'][$id],
);
$upload = new Base_Upload($file);
$upload->setName(Base_String::getUnique(10));
$upload->setExt('jpg');
$upload->setMaxSize('2M');
// пока реализована проверка по mime-типу
// подразумевается, что проверка для изображений, например, будет производиться в класе-наследнике
$upload->setAllowableType('image/jpeg');
if ($upload->getErrors())
{
print_r($upload->getErrors());
}
else
{
$upload->copy(DOCUMENT_ROOT.DIRECTORY_SEPARATOR.'tmp');
}
}
}
}