PHP GÜNCELLEME SİSTEMİ HK.
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.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
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ı.
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.
<?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