Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление скриптов, Ищу описание методов обновления кода 
:(
    Опции темы
ArNic
Дата 20.3.2012, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



У меня несколько проектов. Каждый день я что либо дорабатываю в ядре и модулях, для того чтобы помнить изменения пользуюсь SVN. НО это не решает основной проблемы обновления системы. Замена для меня не совсем верное решение. Есть ли описание или какая либо документация по гибкому обновлению некомпилированного кода. Т.е. чтобы можно было при наличии незначительных разниц между двумя модулями внести в оба кода новую логику.
Пример:
Файл №1
Код

$i=true;
if($i){
      print 'Ура этот модуль работает';
}else{
      print 'Жаль, но этот код не работает';
}


Файл №2
Код

$i=1;
if($i){
      print 'Ура этот модуль, модуль №2 работает';
}else print 'Жаль, но это модуль №2 и код не работает';


$i=1 или $i=true заменить на $i=isset($j);
else заменить на elseif($u!=1);

Пытаюсь понять как другие системы проводят обновление, но у них, как я понял xml файл с инструкциями замены, добавления, удаления. И, если размер обновляемого файла или версия не  верны он отказывается обновлять.

Если у кого есть более универсальные решения или документация с описанием решений очень буду рад услышать... и наверное не только я.

Это сообщение отредактировал(а) ArNic - 20.3.2012, 22:28
PM MAIL ICQ   Вверх
ksnk
Дата 20.3.2012, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



А чем не подходит svn? Просто каждый раз, когда отдаешь клиенту код, который должен быть работоспособным - делаешь тэг и сохраняешь код там. Или, если есть уверенность, что код будет сильно изменяться - сразу заводишь бранч.

Если пришла пора обновить клиенту код - восстанавливаешь по тэгу состояние кода клиента, делаешь бранч (если не было) и сливаешь туда критичные/нужные изменения из основной ветки. После этого делаешь патч, сравнивая исходное состояние и слитые изменения. 

Патч грузится на сервер и там применяется. Патчилка - отдельный скрипт на php. 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sanchezzz
Дата 21.3.2012, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



1 можно держать суму контроль версии файлов дата изменения файла + размер 
2 если у вас все функции в классах то делайте версию в классе это правда лениво затем я писал отдельно сервер обнавлений который спрашивал если новая версия файлов если есть отдавал zip архив и распаковывал стойже структурой файлов

для распаковки и запаковки использовал класс dunzip2.class

файлы на серверной части хранил 

$downid версия '0001' по минор типу версий
0 ключ не действителен
1 файл не найден...


северная часть
Код

$file = $_SERVER['DOCUMENT_ROOT']. "/core/server/updetes/{$downid}/archive.zip";
if(file_exists($file)){
 header ("Content-Type: application/octet-stream");
 header ("Accept-Ranges: bytes");
 header ("Content-Length: ".filesize($file));  
 header ("Content-Disposition: attachment; filename=archive.zip"); 
 readfile($file);
 }else{ print '1'; exit;}
endif;



клиент версия //обнавление

Код

    case 'getUpdateSystem': 
        $file = new file();
        $id = $_POST['id'];    
        //$key = GS('CMSLicenseKey');
        $arhive_name = 'file'. $id .'.zip';
        $sql_file    = 'file'. $id .'.sql';

        $url = GS('UpdateServerSite') . '?downid=' .$id . '&key='.$key;
        //print $url;
        
        $fileline = file_get_contents($url);
            if($fileline=='0'){ print 'Неверный ключ лицензии<br>'; break(1);}
            if($fileline=='1'){ print 'Версия обнавления не найдена<br>'; break(1); }

            if(is_dir(core_root .'/updates/')){
                $file->FileWrite(core_root .'/updates/'.$arhive_name,$fileline);
                print '<b>Установка обнавления</b> '.$id.'<br>';
                print 'Скачивание файлов на сервер, <b>удачно</b> ...<br>';
                
                $uz = new dUnzip2(core_root .'/updates/'.$arhive_name);
                
                $list = $uz->getList();
                /*
                pre($list);
                */
                
                //print_r($uz->getZipInfo());    
                /*foreach($list as $key=>$it){
                    
                    print "Распоковка {$it['file_name']}<br>";
                }*/
                $uz->unzipAll( core_root ); // unpack в /core/
                print '<b>Распоковка файлов завершина</b><br>';
                
            }
        
            
    break;



Добавлено через 10 минут и 42 секунды
вот еще пригодится проверяет если в таблице поле
Код

    function is_column( $bd_name  , $table  , $column_name ){
        $sql = "select * from information_schema.columns
            where 
            table_schema = '{$bd_name}' 
            and 
            table_name = '{$table}' 
            and 
            column_name = '{$column_name}'";
            mysql_select_db($bd_name);
        $res = mysql_query($sql);
        if(mysql_num_rows($res) > 0 ) return true; else return false;
    }



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.