v2.5.2
Giriş yap

PHP GÜNCELLEME SİSTEMİ HK.

quard1453
1,051 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Merhabalar, ben güncelleme sistemi hakkında bir soru sormak istiyorum
yapmış oldugum bir firma scripti var ve ben bunu müşterime kurdugum zaman ıster onun hostıngıne veya benım hostıngıme gerçekleştirmek istediğim güncelleme sistemini nasıl yapabılecegım hakkında bır tecrubem yoktur. Bu konu hakkında bilgisi olan yardımcı olabilir mi?
Örnek; Ben v1.0 surumunu musterıme kurdum ve yenı bır sıstem ekledım bu guncellemeyı uzaktan butun musterılerıme gonderıp guncelleme işlemlerini sağlamalarını istiyorum.

ynswtf
1478 gün önce

Baya sıkıntılı bir mevzu, kendi projemde ilerlediğim durumu anlatayim.

Veritabanı için Doctrine kullanıyorum. Doctrine'de veritabanı güncelleyebileceğim fonksiyonlar var, Baya geniş ve güzel bir sınıf yapısı.
her modülde bir script.php dosyası barındırıyorum. Bu dosya modüllerin veritabanı tipini barındıryor.

<?php
use GreenCheapApplication as App;
return [
    'enable' => function ($app) {
        $util = $app['db']->getUtility();

        if( !$util->tableExists('@brain_marketplace') ){
            $util->createTable('@brain_marketplace' , function($table){
                $table->addColumn('id' , 'integer' , ['autoincrement' => true , 'unsigned' => true , 'length' => 10]);
                $table->addColumn('user_id' , 'integer');
                $table->addColumn('categories_id' , 'simple_array');
                $table->addColumn('name' , 'string' , ['notnull' => false]); // marketplace.json'dan gelen veri bu
                $table->addColumn('title' , 'string');
                $table->addColumn('slug' , 'string');
                $table->addColumn('type' , 'integer' , ['notnull' => false]);
                $table->addColumn('constraints' , 'integer');
                $table->addColumn('status' , 'integer');
                $table->addColumn('date' , 'datetime');
                $table->addColumn('modified' , 'datetime' , ['notnull' => false]);
                $table->addColumn('price' , 'decimal' , ['notnull' => false , 'precision' => 3 , 'scales' => 2]);
                $table->addColumn('data' , 'json_array' , ['notnull' => false]);
                $table->setPrimaryKey(['id']);
                $table->addIndex(['title'] , '@BRAIN_MARKETPLACE_TITLE');
                $table->addIndex(['slug'] , '@BRAIN_MARKETPLACE_SLUG');
            });
        }
    },
    'disable' => function ($app) {
        $util = $app['db']->getUtility();

        if($util->tableExists('@brain_marketplace_versions')){
            $util->dropTable('@brain_marketplace_versions');
        }
    },
    'updates' => [
        '1.0.1' => function ($app) {
            $util = $app['db']->getUtility();
            if( !$util->tableExists('@brain_marketplace_versions') ){
                $util->createTable('@brain_marketplace_versions' , function($table){
                    $table->addColumn('id' , 'integer' , ['autoincrement' => true , 'unsigned' => true , 'length' => 10]);
                    $table->addColumn('user_id' , 'integer');
                    $table->addColumn('marketplace_id' , 'integer');
                    $table->addColumn('version' , 'string');
                    $table->addColumn('changelog' , 'text' , ['notnull' => false]);
                    $table->addColumn('requirements' , 'json_array' , ['notnull' => false]); //Gereksinimler
                    $table->addColumn('compatible' , 'json_array' , ['notnull' => false]); // Uyumlular
                    $table->addColumn('download' , 'integer' , ['default' => 0]);
                    $table->addColumn('constraints' , 'integer');
                    $table->addColumn('status' , 'integer');
                    $table->addColumn('package_path' , 'string');
                    $table->addColumn('date' , 'datetime');
                    $table->addColumn('data' , 'json_array' , ['notnull' => false]);
                    $table->setPrimaryKey(['id']);
                    $table->addIndex(['marketplace_id'] , '@BRAIN_MARKETPLACE_VERSIONS_MARKETPLACE_ID');
                });
            }
        }    
    ]
];

Her modül dosyasında composer.json mevcut bu dosyadaki version satırını projenin versiyonu olarak var sayırıyorum her zaman.
Symfony Console kütüphanesi ile kendime bir command line oluşturdum. Command line da php greencheap build --constraint=release --publish=server komutu ile Composer sınıfını kullanarak zipliyorum ve publish komutunda eğer server yazıyorsa server-side sunucuma paket zip olarak gidiyor.

Müşterilerimin sunucuları yönetim panelinde client to server-side yaparak sürüm kontrolü sağlıyor. Eğer son sürüm mevcut sürümden büyükse o paket indirilir ve yine Composer ile paket açılır. Açıldığı sırada modüllerdeki script.php dosyaları kontrol edilir ve güncelleme varsa doctrine ile güncelleme veritabanına sağlanır.

İşin kısası hayal gücünüze bağlı.