2. Хранение загруженных файлов
Хранилище:
• Локальная файловая система.
• База данных.
• NFS.
• Amazon S3.
• Webdav.
Организация файлов в локальной ФС:
• Соглашения.
• Общий подход.
3. WEBDAV
- это современный и защищённый сетевой протокол
высокого уровня, работающий поверх HTTP для
доступа к объектам и коллекциям объектов.
• Выполнение основных файловых операций над
объектами на удаленном сервере.
• ngx_http_dav_module или mod_dav.
• Для использования в ZF - Zend_Http_Client.
6. Сервера и их взаимодействие
• Один сервер -> VPS -> Кластер.
• Storage хранит только исходники картинок.
• На storage серверах стоит nginx с модулем
ngx_http_dav_module.
• Create_full_put_path on.
• Webdav используется только для загрузки
картинок на storage.
8. Загрузка файлов
• Для каждого файла своя запись в таблице.
• is_deleted и is_ready для отложенной
обработки.
• На основе id генерируется путь
161/374/000473161 до файла на storage
сервере.
• Каждая сущность в базе, имеющая
файл(ы), связывается с id файла.
13. Устройство ресайзера. Кеширование.
• Кеширует nginx, ресайзит php.
• Кешируем на клиенте навсегда.
• В скрипте ресайзера не нужно поднимать
bootstrap ZF).
• В nginx нужно разделять пулы коннектов для
отдачи из кеша и ресайза.
• Благодаря цифровому подписыванию ресайзит
только в разрешенные размеры.
14. Собирая все вместе
• Создание записи в базе при загрузке картинки и
перемещение исходного файла в необходимую
директорию.
• Файл конфигурации.
• Вью хелпер для урлов.
• Скрипт для генерации картинок (с
кешированием).
15. Загрузка файлов
$client = new Ext_Webdav_Client($connect_params);
$adapter = new Ext_File_Adapter_Webdav();
$adapter->setClient($adapter);
$transfer = new Ext_File_Transfer();
$transfer->setAdapter($adapter);
Ext_Form_Element_File::setTransfer($transfer);
return $transfer;
16. Загрузка файлов
public function configure(Ext_File $file) {
$table = new File();
$row = $table->createRow();
list($row->width, $row->height) =
getimagesize($file->getFilePath());
$row->save();
$this->getAdapter()->setUri($this-
>generateUri($row->id));
return $row;