masterflash-ru/storage
Composer 安装命令:
composer require masterflash-ru/storage
包简介
Сервис-библиотека для обработки файлов в хранилище
README 文档
README
библиотека для работы с хранилищем файлов
После установки следует загрузить в базу дамп из папки data, или использовать пакет masterflash-ru/migration, и загрузить дамп.
Установка composer require masterflash-ru/storage
Библиотека предназначена для хранении файлов в файловом хранилище. По требованию возвращается имя файла. В базе данных хранится только имя файла, причем для одного элемента может быть множество файлов с разными размерами.
В базу вместе с именами файлов записывается номер версии библиотеки, для будущих расширений, что бы в существующих хранилищах не производить изменения.
Регистрация в ZF3 производится стандартным образом, экземпляр библиотеки можно получить аналогично как и другие объекты, обычно в фабрике контроллера, или другой библиотеки-сервиса.
Конфигурация библиотеки описана ниже в примере, эту конфигурацию следует разместить в конфигурацию приложения:
........ /*хранилище и обработка (ресайз) фото*/ "storage"=>[ /*хранит загруженные файлы, готовые для обработки это промедуточное хранение */ 'data_folder'=>"data/images", /* *Именованные хранилища фото в виде множества вложенных папок *по умолчанию имеется всегда default *уровень вложений и размеры имен каталогов определяются параметром в фильтр CopyToStorage */ 'file_storage'=>[ 'default'=>[ 'base_url'=>"media/pics/", ], ], /*чистить хранилище только по расписанию, используется при очень больших хранилищах *когда за текущую операцию не успевает обойти все каталоги * включите по расписанию обращение к адресу http://site.ru/clear-storage-cron */ "clear_storage_only_cron"=>false, 'items'=>[ /*хранилище для ленты новостей, ключ это имя секции, которая используется для работы *он же является именем раздела, под которым записываются и считываются файлы*/ "news"=>[ "description"=>"Хранение фото новостей", 'file_storage'=>'default', /*имя хранилища*/ 'file_rules'=>[ 'admin_img'=>[ 'filters'=>[ CopyToStorage::class => [ /*Наличе этого фильтра ОБЯЗАТЕЛЬНО!*/ 'folder_level'=>1, 'folder_name_size'=>3, 'strategy_new_name'=>'translit' /*стратегия создания нового имени, none, md5, sha1, translit, uniqid*/ ], ImgResize::class=>[ "method"=>1, "width"=>150, "height"=>150, 'adapter'=>Gd::class, ], ImgOptimize::class=>[ "jpegoptim"=>85, "optipng"=>3, ], Watermark::class=>[ "waterimage"=>"data/images/water2.png", 'adapter'=>'Consoleimagick', ], ], 'validators' => [/*валидаторы достаточно применить для одной ветки, т.к. последующие ветки используют исходное изображание вновь*/ IsImage::class=>[], ImageSize::class => [ 'minWidth' => 500, 'minHeight' => 250, ], ], ], 'anons'=>[ 'filters'=>[ CopyToStorage::class => [ 'folder_level'=>1, 'folder_name_size'=>3, ], ImgResize::class=>[ "method"=>1, "width"=>500, "height"=>250, 'adapter'=>'gd', ], ], ], ], ],//news ], ], .......
/*объект ImagesLib регистрируется в менеджере, его можно извлечь в фабриках, если нужна обработка*/ use Mf\Storage\Service\ImagesLib; /*получить экземпляр*/ $imglib=$container->get(ImagesLib::class);
Запись в библиотеку:
/* вначале нужно выбрать секцию из конфига, в которой указаны правила обработки фото (куда писать, и как уменьшать) $name - имя секции конфига с правилами обработки файлов, из примера выше это "news" */ $ImgLib->selectStorageItem($name); /* далее нужно передать исходный файл в виде пути и имени, имя раздела и идентификатор записи раздела $filename - исходное имя файла, как правило в data/datastorage, $razdel - имя раздела, например, news (обычно совпадает с именем массива фото, и равно ключу в имени конфига), $razdel_id - внутренний идентификатор элемента, например, ID новости в ленте */ $ImgLib->saveImages($filename,$razdel,$razdel_id);
Чтение:
/* $razdel_name - строка имени раздела, например, news $id - ID новости, или какой-либо идентификатор под которым хранится изображение, $item_name - имя самого изображения, например, anons полностью готовый URL путь+имя файла для подставновки в тег <img> */ $img=$ImgLib->loadImage($razdel_name,$id,$item_name);
Удаление в разделе элемента:
//$razdel_name - имя раздела $id - идентификатор раздела, например, ID новости $ImgLib->deleteFile($razdel_name,$id);
Удаление всех элементов во всем разделе:
//$razdel_name - имя раздела $ImgLib->deleteFileRazdel($razdel_name);
Библиотека регистрирует помощник для view, при помощи которого можно получить сразу имя файла и путь, готовых для тега
По сути помощник вызывает loadImage с этим же параметрами, дополнительно обрабатывает помощником basePath фреймворка
<img src="<?=$this->ImageStorage($stream_name,$id,$storage_item_name);?>" />
Имеется помощник PictureStorage, который генерирует новомодный тег , например,
<?=$this->PictureStorage($stream_name,$id,$storage_item_name,["alt"=>"Подпись фото"]);?>
4-й параметр массив атрибут для тега img, вставляется как есть
В конфиге приложения должны быть настройки кэша:
'caches' => [ 'DefaultSystemCache' => [ 'adapter' => [ 'name' => Filesystem::class, 'options' => [ 'cache_dir' => './data/cache', 'ttl' => 60*60*2 ], ], 'plugins' => [ [ 'name' => Serializer::class, 'options' => [ ], ], ], ], ],
Для работы с базой в конфиге приложения должно быть объявлено DefaultSystemDb:
...... "databases"=>[ //соединение с базой + имя драйвера 'DefaultSystemDb' => [ 'driver'=>'MysqlPdo', //"unix_socket"=>"/tmp/mysql.sock", "host"=>"localhost", 'login'=>"root", "password"=>"**********", "database"=>"simba4", "locale"=>"ru_RU", "character"=>"utf8" ], ], .....
Если хранилище не большого размера, то можно чистку делать при каждой операции в нем, для этого в конфиге "clear_storage_only_cron" присвойте true. В принципе можно не чистить, если операций не много. Для очистки хранилища можно использовать консольную команду из корня приложения:
./vendor/bin/storage clear www all ``` Где www - Публичная папка, на нее указывает веб сервер, all - все чистить Данная команда требует установки пакета symfony/console, при помощи команды composer require symfony/console
masterflash-ru/storage 适用场景与选型建议
masterflash-ru/storage 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 211 次下载、GitHub Stars 达 1, 最近一次更新时间为 2017 年 10 月 21 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「ZendFramework」 「masterflash」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 masterflash-ru/storage 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 masterflash-ru/storage 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 masterflash-ru/storage 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A module manager for Zend Framework which can be used to create configs per domain.
ZF2 module for Doctrine 1.x integration
Validation Rat adapter for Zend Framework Validators
Просто страницы для системы управления Simba
Интегрирование ckfinder
Переводчик для валидаторов, работает по аналогии с стандартным
统计信息
- 总下载量: 211
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 5
- 依赖项目数: 4
- 推荐数: 0
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2017-10-21