webasyst alpha

  • Фреймворк
  • Приложения
  • Помощь
  • Блог
  • Скачать
  • Демо
  • Возможности
  • Лицензия
  • Документация Webasyst
    • Введение
    • Установка
    • Создание сайта
      • Пример: создание сайта
      • Сайты и маршрутизация
      • Шаблоны и темы оформления
      • Страницы и общие блоки
    • Разработка приложений
      • Пример: приложение «Гостевая книга»
      • Приложение-пустышка
      • Файловая структура
      • Конфигурационные файлы
      • Шаблоны
      • Интерфейс
      • База данных
      • Правила и рекомендации по именованию
      • Маршрутизация в бекенде
      • Маршрутизация во фронтенде
      • Экшены и контроллеры
      • Композитные макеты
      • Права доступа
      • AJAX
      • Переменные окружения
      • Сессии
      • Локализация
      • Мобильная версия
      • Работа с почтой
      • Работа с изображениями
      • Загрузка файлов на сервер
      • Журнал действий пользователя
      • Интеграция с приложением «Сайт»
      • Интеграция с приложением «Контакты»
      • Действия по расписанию
      • Адаптеры авторизации
      • Плагины
    • Настройки сервера
      • Nginx + FastCGI
      • Настройка Cron

Загрузка файлов на сервер

Cистемный класс waRequest предоставляет удобный инструментарий для работы с файлами, загружаемыми на сервер по протоколу HTTP (с помощью элемента веб-формы <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) {
  ...
}
  • О компании
  • Фреймворк и WebAsyst.ru
    • Language
      • Русский
      • English

© 2011 Webasyst