v2.5.2
Giriş yap

PHP GÜNCELLEME SİSTEMİ HK.

quard1453
1,047 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.

Cevap yaz
Cevaplar (4)
ynswtf
1470 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ı.

quard1453
1470 gün önce

Aynen wordpress tarzı dusunebılırız ama bırturlu bulamadım mantıgını

aydinkeskin
1470 gün önce

sanırım onu söylemek istemdi arkadaşımız
anladığım kadarı ile
programların mantığı biz v1 i yükledik güncelleme geliyor v2 var gel al diyorlar
buda onun gibi.

bende merak ediyorum sanırım git ile yapıyorlar bu durumu daha kolay yolu varsa paylaşan olur umarım.

arco
1472 gün önce

<?php
$mail=strip_tags($_POST["mail"]);
$ad_soyad=strip_tags($_POST["ad_soyad"]);
sorgu = $dbcon->prepare("UPDATE uyeler SET mail = ?, isimsoyisim = ?");
$sorgu->bindParam(1, $mail
, PDO::PARAM_STR);
$sorgu->bindParam(2, $ad_soyad, PDO::PARAM_STR);
$sorgu->execute();
?>
güncelleme işlemini böyle yapabilirsin hem sql inj açığını önlemiş hem de xss açığını önlemiş olursun