Системный класс waRequest содержит инструментарий для работы с файлами, загружаемыми на сервер с помощью элемента веб-формы <input type="file">
Загрузка одного файла
Предположим, у вас есть следующая форма с одним элементом input типа file:
<form action="..." method="post" enctype="multipart/form-data"> ... <input type="file" name="photo"> ... </form>
Для обработки файла, загружаемого через такую форму, необходимо обратиться к методу waRequest::file()waRequestFile, позволяющего выполнять дальнейшую работу с загруженным файлом.
В действительности возвращается экземпляр классаwaRequestFileIterator, однако в данном случае он работает в качестве прозрачной обертки вокруг единственного экземпляраwaRequestFileв списке. Подробнее о классеwaRequestFileIteratorсм. ниже раздел «Загрузка нескольких файлов».
$file = waRequest::file('photo');
Поля класса waRequestFile доступны только для чтения, их значение полностью аналогично таковым в массиве $_FILES:
$file->name;$file->type;$file->size;$file->tmp_name;значение этого поля также можно получить, если привести переменную$fileк типуstring:$tmp_file_name = (string) $file;
$file->error;$file->extension;— расширение файла, полученное из оригинального имени файла.
Методы класса waRequestFile:
$file->uploaded()— возвращаетtrue, если имела место загрузка файла на сервер (т. е. значение поляinputтипаfileв веб-форме было непустым); в случае если файл не был загружен на сервер (т. е. если возвращает$file->uploaded()false), вызов всех остальных методов классаwaRequestFileвернёт экземпляр объекта исключения типаwaException;$file->moveTo('path/to/file')перемещает загруженный файл в указанный каталог (аналогично PHP-функцииmove_uploaded_file());$file->moveTo('path/to/dir', 'filename')то же самое, но с присвоением нового имени загруженному файлу;$file->copyTo('path/to/file')копирует загруженный файл в указанный каталог;$file->copyTo('path/to/dir', 'filename')то же самое, но с присвоением нового имени созданной копии файла;$file->waImage()возвращает экземпляр классаwaImageдля обработки изображения.
Внимание! Если загруженный файл не является изображением, вызов конструктораwaImage()вызоветException. Поэтому рекомендуется использовать такой вызов в блоке: try/catch
try {
$file->waImage()
->resize(...)
->crop(..)
->save(...);
} catch(Exception $e) {
echo "Файл не является изображением, либо произошла другая ошибка: ".$e->getMessage();
return;
}
Подробнее о классе waImage см. раздел «Изображения».
Загрузка нескольких файлов
Рассмотрим загрузку файлов через форму с несколькими элементами input типа file с одинаковым именем:
<form action="..." method="post" enctype="multipart/form-data"> ... <input type="file" name="photo[]"> <input type="file" name="photo[]"> <input type="file" name="photo[]"> ... </form>
Метод waRequest::file()waRequestFileIterator:
$files = waRequest::file('photo');
В классе waRequestFileIterator доступны те же методы, что и в waRequestFile.
Работают они так, как если бы применялись к первому файлу в списке. Вызов метода $files->uploaded()
Класс waRequestFileIterator реализует интерфейс Iterator; это означает, что можно использовать цикл foreach
для перебора списка загруженных файлов. Каждый элемент в списке представляет собой экземпляр класса waRequestFile,
для которого доступны все описанные выше методы:
foreach($files as $file) {
...
}









