PHP code example of masterflash-ru / storage

1. Go to this page and download the library: Download masterflash-ru/storage library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

masterflash-ru / storage example snippets


........
    /*хранилище и обработка (ресайз) фото*/
    "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);


    'caches' => [
        'DefaultSystemCache' => [
            'adapter' => [
                'name'    => Filesystem::class,
                'options' => [
                    'cache_dir' => './data/cache',
                    'ttl' => 60*60*2 
                ],
            ],
            'plugins' => [
                [
                    'name' => Serializer::class,
                    'options' => [
                    ],
                ],
            ],
        ],
    ],

......
    "databases"=>[
        //соединение с базой + имя драйвера
        'DefaultSystemDb' => [
            'driver'=>'MysqlPdo',
            //"unix_socket"=>"/tmp/mysql.sock",
            "host"=>"localhost",
            'login'=>"root",
            "password"=>"**********",
            "database"=>"simba4",
            "locale"=>"ru_RU",
            "character"=>"utf8"
        ],
    ],
.....

./vendor/bin/storage clear www all