# Delphinum (22.08.2016 / 20:23)
Для обработки изображений в последнем своем проекте использовал данный пакет.
В живую это выглядело так:
$this->fileTable->edit($file, function
Вот это крутая штука. Я знаком с этим классом, мне понравился. Все в одном файле и необходимый функционал есть(не знаю почему он избыточен).
Мне кажется загрузку файла на сервер у вас можно ограничить одним классом вида:
HTML форма (+/-)
<form method="POST" action="/index.php" enctype="multipart/form-data">
<input type="file" name="first"/>
<input type="file" name="second"/>
<input type="file" name="last"/>
<input type="submit"/>
</form>
Класс (+/-)
class UploadedFile{
/**
* @var string Адрес файла.
*/
private $file;
/**
* @var int Размер файла.
*/
private $size;
/**
* @var int Код ошибки.
*/
private $errorStatus;
/**
* @var string Имя файла на машине клиента.
*/
private $clientFilename;
/**
* @var string Mime-тип файла на машине клиента.
*/
private $clientMediaType;
public function __construct($file, $size, $errorStatus, $clientFilename = null, $clientMediaType = null){
$this->file = $file;
$this->size = $size;
$this->errorStatus = $errorStatus;
$this->clientFilename = $clientFilename;
$this->clientMediaType = $clientMediaType;
}
// Factories
/**
* @param string $name Имя элемента массива $_FILES, в котором содержится
* данные целевого файла.
*
* @return self Загружаемый файл.
*/
public static function createByGlobal($name){
$file = $_FILES[$name];
return new static($file['tmp_name'], $file['size'], $file['error'], $file['name'], $file['type']);
}
// Getters and Setters
public function getFile(){
return $this->file;
}
public function getSize(){
return $this->size;
}
public function getErrorStatus(){
return $this->errorStatus;
}
public function getClientFilename(){
return $this->clientFilename;
}
public function getClientMediaType(){
return $this->clientMediaType;
}
// Other
/**
* @param string $targetPath Новый адрес, по которому будет перемещен файл.
*
* @throws RuntimeException Выбрасывается в случае ошибки при переносе файла.
*/
public function moveTo($targetPath){
if(move_uploaded_file($this->file, $targetPath) === false){
throw new RuntimeException('Error occurred while moving uploaded file');
}
$this->file = $targetPath;
}
}
$file = UploadedFile::createByGlobal('first');
$file->moveTo('file_storage/' . $file->getClientFilename());
Koenig, ты про юниксовую команду cp? Ну а вам что надо от загрузчика еще? )
Delphinum, банальность как по мне, вон Рамзес запилил сторадж
Koenig, Так загрузка файла операция банальная.
Delphinum, ну по сути подобного класса было бы достаточно, но как по мне, пример с картинками, то мне нужна только ссылка на тмп, оттуда я забираю картинку и уже потом сохраняю, а шмон массива файлз , валидация и прочее не должна падать на этот класс как по мне, хотя тоже можно вытащить из него
Koenig, ну так ты правильно думаешь. Я привел пример класса, представляющего загружаемый файл. Можно так же реализовать следующие классы:
* Request - запрос пользователя с инфой о загружаемых файлах и не только
* FileStorage - файловое хранилище, завязанное на каталог
* ImageEditor - редактор картинок
* ValidatorIInterface - пачка валидаторов, которая может использоваться как для валидации файлов, так и для других нужд
P.S. это если делать по хорошему с применением ООП. Если слишком сложно, то можно аналогичное реализовать на процедурке, получится не хуже.
Delphinum, вроде у тебя видел что то подобное с пачкой валидаторов
# Koenig (22.08.2016 / 22:57)
Delphinum, банальность как по мне, вон Рамзес запилил сторадж
я пилил отдельно типа роутинга файлов, а аплоад у меня такой же простой как предлагают тут.
пара настроек на проверку размер, миметип, расширение и валидация имени сохранения, больше я даже и придумать то ни чего не смог к аплоаду)) он же по сути прост как 3 копейки, получил, проверил, отдал\сохранил