Синхронизация:Настройка PHP-скриптов — различия между версиями

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск
(Новая страница: «==Используемые сокращения== ГБ - Глобальная база КБ - Клиентская база В скриптах настраи…»)
 
 
(не показаны 3 промежуточные версии этого же участника)
Строка 4: Строка 4:
  
 
  В скриптах настраиваются только файлы: declare.php, checkupd.php, getrelationtype.php.  
 
  В скриптах настраиваются только файлы: declare.php, checkupd.php, getrelationtype.php.  
'''ВНИМАНИЕ!!!!'' Перед исправлением любого из скрипта, необходимо сделать резервную копию.
+
  '''ВНИМАНИЕ!!!!''' Перед исправлением любого из скрипта, необходимо сделать резервную копию.
  
==DECLARE.PHP (НАСТРОЙКА ПАРАМЕТРОВ СИНХРОНИЗАЦИИ)==
+
==DECLARE.PHP (настройка параметров синхронизации)==
  ''$GLOBALS["DB_USER"]="LOGIN";
+
  ''$GLOBALS["DB_USER"]="LOGIN";''
  $GLOBALS["DB_PASSWD"]="PASSOWRD";
+
  ''$GLOBALS["DB_PASSWD"]="PASSOWRD";''
  $GLOBALS["CODEKEY"]="njHtdlf146s8mkGFrejhsw875HJgf~sfkksheu69js";
+
  ''$GLOBALS["CODEKEY"]="njHtdlf146s8mkGFrejhsw875HJgf~sfkksheu69js";''
  $GLOBALS["PATH_ROOT"]="C:\\wamp\\www\\sinhro\\engine\\";
+
  ''$GLOBALS["PATH_ROOT"]="C:\\wamp\\www\\sinhro\\engine\\";''
  $GLOBALS["PATH_USERS"]="C:\\wamp\\www\\sinhro\\engine\\users\\";
+
  ''$GLOBALS["PATH_USERS"]="C:\\wamp\\www\\sinhro\\engine\\users\\";''
  $GLOBALS["PACKETSIZELIMIT"]=10000000;  
+
  ''$GLOBALS["PACKETSIZELIMIT"]=10000000; ''
  $GLOBALS["CLEARDIR"]=true;
+
  ''$GLOBALS["CLEARDIR"]=true;''
  $GLOBALS["XFIELDS0"]=" AGENTS.GLOBAL_AGENT_ID ";
+
  ''$GLOBALS["XFIELDS0"]=" AGENTS.GLOBAL_AGENT_ID ";''
  $GLOBALS["XFIELDS1"]=" WARES.SNAME CASH_DOCS.GLOBAL_ID CASH_DOC_TYPES.GLOBAL_ID DEPS.GLOBAL_ID ";
+
  ''$GLOBALS["XFIELDS1"]=" WARES.SNAME CASH_DOCS.GLOBAL_ID CASH_DOC_TYPES.GLOBAL_ID DEPS.GLOBAL_ID ";''
  $GLOBALS["USEQUEUE"]=true;
+
  ''$GLOBALS["USEQUEUE"]=true;''
  $GLOBALS["QUEUEDIR"]="C:\\wamp\\www\\sinhro\\engine\\queue\\";
+
  ''$GLOBALS["QUEUEDIR"]="C:\\wamp\\www\\sinhro\\engine\\queue\\";''
  $GLOBALS["QUEUELIMIT"]=100;
+
  ''$GLOBALS["QUEUELIMIT"]=100;''
  $GLOBALS["NODELETE"]=false;
+
  ''$GLOBALS["NODELETE"]=false;''
  ?>''
+
  ''?>''
 
  Скрипт установки параметров синхронизации. Описание параметров.
 
  Скрипт установки параметров синхронизации. Описание параметров.
 
  DB_USER – Логин для подключения к ГБ
 
  DB_USER – Логин для подключения к ГБ
Строка 42: Строка 42:
 
  NODELETE – Запрет удаления данных при синхронизации. На данный момент параметр не работает.
 
  NODELETE – Запрет удаления данных при синхронизации. На данный момент параметр не работает.
  
==CHECKUPD.PHP (ФОРСИРОВАННОЕ ОБНОВЛЕНИЕ)==
+
==CHECKUPD.PHP (форсированное обновление)==
  ''<?php
+
  ''<?php''
  //<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
+
  ''//<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">''
  function checkupd(&$params, &$zipfilename, $userfolder, $it)
+
  ''function checkupd(&$params, &$zipfilename, $userfolder, $it)''
  {
+
  ''{''
   $reltype=0;
+
   ''$reltype=0;''
   $profile_id=getprofile_id($it,$params["profile_id"],$reltype);
+
   ''$profile_id=getprofile_id($it,$params["profile_id"],$reltype);''
   if (!$profile_id){die(" error : профиль клиента не найден");}
+
   ''if (!$profile_id){die(" error : профиль клиента не найден");}''
   if ($profile_id==0){die(" error : профиль клиента равен нулю");}
+
   ''if ($profile_id==0){die(" error : профиль клиента равен нулю");}''
   $fn=$GLOBALS["PATH_ROOT"]."shellupd/exe.ver";
+
   ''$fn=$GLOBALS["PATH_ROOT"]."shellupd/exe.ver";''
   $f=fopen($fn,"r");
+
   ''$f=fopen($fn,"r");''
   $s_ver=fread($f,filesize($fn));
+
   ''$s_ver=fread($f,filesize($fn));''
   fclose($f);
+
   ''fclose($f);''
   $c_ver=$params["exever"];
+
   ''$c_ver=$params["exever"];''
   if (!is_num($s_ver,false)){die("error Ошибка в определении версии обновления (server)");}
+
   ''if (!is_num($s_ver,false)){die("error Ошибка в определении версии обновления (server)");}''
   if (!is_num($c_ver,false)){die("error Ошибка в определении версии обновления (client)");}
+
   ''if (!is_num($c_ver,false)){die("error Ошибка в определении версии обновления (client)");}''
   if ($c_ver>=$s_ver) {die("infoВерсия клиента актуальна! (".$s_ver.")");}
+
   ''if ($c_ver>=$s_ver) {die("infoВерсия клиента актуальна! (".$s_ver.")");}''
   $fn=$GLOBALS["PATH_ROOT"]."shellupd/data.zip";
+
   ''$fn=$GLOBALS["PATH_ROOT"]."shellupd/data.zip";''
   if (!file_exists($fn)) {die("error Не найдено обновление!");}
+
   ''if (!file_exists($fn)) {die("error Не найдено обновление!");}''
   readfile($fn);
+
   ''readfile($fn);''
  }
+
  ''}''
  function CheckForceUpd(&$params, &$zipfilename, $userfolder, $it)
+
  ''function CheckForceUpd(&$params, &$zipfilename, $userfolder, $it)''
  {''
+
  ''{''
 
  '''//  return false;'''
 
  '''//  return false;'''
   ''$reltype=0;
+
   ''$reltype=0;''
   $profile_id=getprofile_id($it,$params["profile_id"],$reltype);
+
   ''$profile_id=getprofile_id($it,$params["profile_id"],$reltype);''
   if (!$profile_id){die(" error : профиль клиента не найден");}
+
   ''if (!$profile_id){die(" error : профиль клиента не найден");}''
   if ($profile_id==0){die(" error : профиль клиента равен нулю");}
+
   ''if ($profile_id==0){die(" error : профиль клиента равен нулю");}''
   $fn=$GLOBALS["PATH_ROOT"]."shellupd/exe.ver";
+
   ''$fn=$GLOBALS["PATH_ROOT"]."shellupd/exe.ver";''
   $f=fopen($fn,"r");
+
   ''$f=fopen($fn,"r");''
   $s_ver=fread($f,filesize($fn));
+
   ''$s_ver=fread($f,filesize($fn));''
   fclose($f);
+
   ''fclose($f);''
   $c_ver=$params["exever"];
+
   ''$c_ver=$params["exever"];''
   if (!is_num($s_ver,false)){return false;}//{die("error Ошибка в определении версии обновления (server)");}
+
   ''if (!is_num($s_ver,false)){return false;}//{die("error Ошибка в определении версии обновления (server)");}''
   if (!is_num($c_ver,false)){return false;}//{die("error Ошибка в определении версии обновления (client)");}
+
   ''if (!is_num($c_ver,false)){return false;}//{die("error Ошибка в определении версии обновления (client)");}''
   if ($c_ver>=$s_ver) {return false;}//{die("infoВерсия клиента актуальна! (".$s_ver.")");}
+
   ''if ($c_ver>=$s_ver) {return false;}//{die("infoВерсия клиента актуальна! (".$s_ver.")");}''
   $fn=$GLOBALS["PATH_ROOT"]."shellupd/data.zip";
+
   ''$fn=$GLOBALS["PATH_ROOT"]."shellupd/data.zip";''
   if (!file_exists($fn)) {die("error Не найдено обновление!");}
+
   ''if (!file_exists($fn)) {die("error Не найдено обновление!");}''
   readfile($fn);
+
   ''readfile($fn);''
   $GLOBALS["echo"].="1DF57BEEBA2C163BC206E002D74E1B5B";
+
   ''$GLOBALS["echo"].="1DF57BEEBA2C163BC206E002D74E1B5B";''
   $params["cmd"]="forceupd";
+
   ''$params["cmd"]="forceupd";''
  }
+
  ''}''
  ?>''
+
  ''?>''
 
  В данном скрипте исправляем только одну выделенную строку. Если эта строка закомментирована, то обновление DtClient будет по требованию пользователя.  
 
  В данном скрипте исправляем только одну выделенную строку. Если эта строка закомментирована, то обновление DtClient будет по требованию пользователя.  
 
  Правой кнопкой мыши по значку с DtClient в области уведомлений – «проверить обновления», в случае расхождения версий, DtClient загрузит свежую версию, обновится и перезапустится.  
 
  Правой кнопкой мыши по значку с DtClient в области уведомлений – «проверить обновления», в случае расхождения версий, DtClient загрузит свежую версию, обновится и перезапустится.  
Строка 91: Строка 91:
 
  Новый Distributeclient.exe архивируем в корневой каталог синхронизации (смотри declare.php) папка shellupd и называем файл data.zip. Версию нового обновления указываем в папке shellupd в файле exe.ver.
 
  Новый Distributeclient.exe архивируем в корневой каталог синхронизации (смотри declare.php) папка shellupd и называем файл data.zip. Версию нового обновления указываем в папке shellupd в файле exe.ver.
  
==GETRELATIONTYPE.PHP (НАСТРОЙКА ЧАСТИЧНОЙ СИНХРОНИЗАЦИИ)==
+
==GETRELATIONTYPE.PHP (настройка частичной синхронизации)==
  ''<?php
+
  ''<?php''
  function getrelationtype($tablename, $uuid, $profile_id, $fieldvals)
+
  ''function getrelationtype($tablename, $uuid, $profile_id, $fieldvals)''
  {
+
  ''{''
   if (strpos("  WAREBASE_D SP\$ANALITICS SP\$WDICTS SP\$GROUPS SP\$FRREPORTS G\$PROFILES RECEPTS RECEPT_CLIENTS RECEPT_DOCTORS_FIO RECEPT_LPU RECEPT_MO RECEPT_SICK RECEPT_VIDUD "," ".$tablename." ")>0)
+
   ''if (strpos("  WAREBASE_D SP\$ANALITICS SP\$WDICTS SP\$GROUPS SP\$FRREPORTS G\$PROFILES RECEPTS RECEPT_CLIENTS RECEPT_DOCTORS_FIO RECEPT_LPU RECEPT_MO RECEPT_SICK RECEPT_VIDUD "," ".$tablename." ")>0)''
   {  /*die("error dbg0");*/    return 1;}
+
   ''{  /*die("error dbg0");*/    return 1;}''
  
   if (!isset($fieldvals["ID"])){return 0;}
+
   ''if (!isset($fieldvals["ID"])){return 0;}''
   $id=$fieldvals["ID"];
+
   ''$id=$fieldvals["ID"];''
   switch ($tablename)
+
   ''switch ($tablename)''
   {''
+
   ''{''
     '''case "AGENTS": return 1; break;
+
     '''case "AGENTS": return 1; break;'''
     case "ADDRS":;
+
     '''case "ADDRS":;'''
     case "REPORTS":if (($id>9999) && ($id<1000000000)){return 1;} else {return 0;} break;
+
     '''case "REPORTS":if (($id>9999) && ($id<1000000000)){return 1;} else {return 0;} break;'''
     default: return 0;'''
+
     '''default: return 0;'''
   ''}
+
   ''}''
  }
+
  ''}''
  ?>''
+
  ''?>''
 
  В выделенном блоке описывается распределение таблицы для частичной синхронизации.  
 
  В выделенном блоке описывается распределение таблицы для частичной синхронизации.  
 
  Для каждой таблицы определяются условия, когда можно отправлять данные с ГБ в ГБ (return 0), а когда нельзя (return 1).  
 
  Для каждой таблицы определяются условия, когда можно отправлять данные с ГБ в ГБ (return 0), а когда нельзя (return 1).  

Текущая версия на 11:37, 6 апреля 2015

Используемые сокращения

ГБ - Глобальная база
КБ - Клиентская база
В скриптах настраиваются только файлы: declare.php, checkupd.php, getrelationtype.php. 
 ВНИМАНИЕ!!!! Перед исправлением любого из скрипта, необходимо сделать резервную копию.

DECLARE.PHP (настройка параметров синхронизации)

$GLOBALS["DB_USER"]="LOGIN";
$GLOBALS["DB_PASSWD"]="PASSOWRD";
$GLOBALS["CODEKEY"]="njHtdlf146s8mkGFrejhsw875HJgf~sfkksheu69js";
$GLOBALS["PATH_ROOT"]="C:\\wamp\\www\\sinhro\\engine\\";
$GLOBALS["PATH_USERS"]="C:\\wamp\\www\\sinhro\\engine\\users\\";
$GLOBALS["PACKETSIZELIMIT"]=10000000; 
$GLOBALS["CLEARDIR"]=true;
$GLOBALS["XFIELDS0"]=" AGENTS.GLOBAL_AGENT_ID ";
$GLOBALS["XFIELDS1"]=" WARES.SNAME CASH_DOCS.GLOBAL_ID CASH_DOC_TYPES.GLOBAL_ID DEPS.GLOBAL_ID ";
$GLOBALS["USEQUEUE"]=true;
$GLOBALS["QUEUEDIR"]="C:\\wamp\\www\\sinhro\\engine\\queue\\";
$GLOBALS["QUEUELIMIT"]=100;
$GLOBALS["NODELETE"]=false;
?>
Скрипт установки параметров синхронизации. Описание параметров.
DB_USER – Логин для подключения к ГБ
DB_PASSWD – Пароль для подключения к ГБ
PATH_ROOT – Корневой каталог синхронизации
PATH_USERS – Каталог для сохранения пакетов с клиентов
PACKETSIZELIMIT – Ограничение размера пакета в байтах
CLEARDIR – Признак удаления пакета после успешной загрузки
XFIELDS0 – Список полей таблиц для исключения из синхронизации для профилей с relationtype=0 (Частичная синхронизация).
(Как правило, при двухсторонней синхронизации структура таблиц должна быть идентична, но при необходимости мы можем добавлять необходимые колонки к таблицам, 
которые не будут участвовать в синхронизации. Как правило. Это специфические поля ГБ, но могут быть и в КБ)
(Для удобства просмотра списка полей в скрипте, можно сделать перенос строки следующим образом 
$GLOBALS["XFIELDS0"]=" AGENTS.GLOBAL_AGENT_ ID ";
$GLOBALS["XFIELDS0"].=" AGENTS.GLOBAL_ ID ";
В таком случае в параметр XFIELDS0 будет содержать значение «AGENTS.GLOBAL_AGENT_ ID AGENTS.GLOBAL_ ID»)
XFIELDS1 – Список полей таблиц для исключения из синхронизации для профилей с relationtype=1 (Полная синхронизация). 
USEQUEUE – Признак наличия очереди загрузки в схеме синхронизации
QUEUEDIR – Каталог для хранения пакетов, обрабатываемых очередью загрузки
QUEUELIMIT – Максимальное количество незагруженных пакетов состоящих в очереди к загрузке
Если данный размер превышен, то очередной пакет синхронизации уже не будет поставлен  в очередь.
NODELETE – Запрет удаления данных при синхронизации. На данный момент параметр не работает.

CHECKUPD.PHP (форсированное обновление)

<?php
//<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
function checkupd(&$params, &$zipfilename, $userfolder, $it)
{
 $reltype=0;
 $profile_id=getprofile_id($it,$params["profile_id"],$reltype);
 if (!$profile_id){die(" error : профиль клиента не найден");}
 if ($profile_id==0){die(" error : профиль клиента равен нулю");}
 $fn=$GLOBALS["PATH_ROOT"]."shellupd/exe.ver";
 $f=fopen($fn,"r");
 $s_ver=fread($f,filesize($fn));
 fclose($f);
 $c_ver=$params["exever"];
 if (!is_num($s_ver,false)){die("error Ошибка в определении версии обновления (server)");}
 if (!is_num($c_ver,false)){die("error Ошибка в определении версии обновления (client)");}
 if ($c_ver>=$s_ver) {die("infoВерсия клиента актуальна! (".$s_ver.")");}
 $fn=$GLOBALS["PATH_ROOT"]."shellupd/data.zip";
 if (!file_exists($fn)) {die("error Не найдено обновление!");}
 readfile($fn);
}
function CheckForceUpd(&$params, &$zipfilename, $userfolder, $it)
{
//  return false;
 $reltype=0;
 $profile_id=getprofile_id($it,$params["profile_id"],$reltype);
 if (!$profile_id){die(" error : профиль клиента не найден");}
 if ($profile_id==0){die(" error : профиль клиента равен нулю");}
 $fn=$GLOBALS["PATH_ROOT"]."shellupd/exe.ver";
 $f=fopen($fn,"r");
 $s_ver=fread($f,filesize($fn));
 fclose($f);
 $c_ver=$params["exever"];
 if (!is_num($s_ver,false)){return false;}//{die("error Ошибка в определении версии обновления (server)");}
 if (!is_num($c_ver,false)){return false;}//{die("error Ошибка в определении версии обновления (client)");}
 if ($c_ver>=$s_ver) {return false;}//{die("infoВерсия клиента актуальна! (".$s_ver.")");}
 $fn=$GLOBALS["PATH_ROOT"]."shellupd/data.zip";
 if (!file_exists($fn)) {die("error Не найдено обновление!");}
 readfile($fn);
 $GLOBALS["echo"].="1DF57BEEBA2C163BC206E002D74E1B5B";
 $params["cmd"]="forceupd";
}
?>
В данном скрипте исправляем только одну выделенную строку. Если эта строка закомментирована, то обновление DtClient будет по требованию пользователя. 
Правой кнопкой мыши по значку с DtClient в области уведомлений – «проверить обновления», в случае расхождения версий, DtClient загрузит свежую версию, обновится и перезапустится. 
Если строка раскомментирована, то автоматического обновления не будет, и не важно что будет указано после return. 
Новый Distributeclient.exe архивируем в корневой каталог синхронизации (смотри declare.php) папка shellupd и называем файл data.zip. Версию нового обновления указываем в папке shellupd в файле exe.ver.

GETRELATIONTYPE.PHP (настройка частичной синхронизации)

<?php
function getrelationtype($tablename, $uuid, $profile_id, $fieldvals)
{
 if (strpos("  WAREBASE_D SP\$ANALITICS SP\$WDICTS SP\$GROUPS SP\$FRREPORTS G\$PROFILES RECEPTS RECEPT_CLIENTS RECEPT_DOCTORS_FIO RECEPT_LPU RECEPT_MO RECEPT_SICK RECEPT_VIDUD "," ".$tablename." ")>0)
 {  /*die("error dbg0");*/    return 1;}
 if (!isset($fieldvals["ID"])){return 0;}
 $id=$fieldvals["ID"];
 switch ($tablename)
 {
   case "AGENTS": return 1; break;
   case "ADDRS":;
   case "REPORTS":if (($id>9999) && ($id<1000000000)){return 1;} else {return 0;} break;
   default: return 0;
 }
}
?>
В выделенном блоке описывается распределение таблицы для частичной синхронизации. 
Для каждой таблицы определяются условия, когда можно отправлять данные с ГБ в ГБ (return 0), а когда нельзя (return 1). 
В приведенном примере таблица AGENTS для профилей с relationtype=1 будет синхронизироваться только в одну сторону КБ –> ГБ. 
В обратную сторону не будет, т.к. данный скрипт будет блокировать отправку для всех записей таблицы. 
Таблицы ADDRS, напротив, отправляется в КБ безусловно. 
Таблица REPORTS отправляется с ГБ в КБ только для строк, где 10000<=id<=1000000000. 
Для описания условий доступны любые поля таблицы.