Синхронизация:Настройка PHP-скриптов — различия между версиями
Материал из wiki.standart-n.ru
Vlasova (обсуждение | вклад) |
Vlasova (обсуждение | вклад) |
||
(не показана одна промежуточная версия этого же участника) | |||
Строка 7: | Строка 7: | ||
==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 – Логин для подключения к ГБ | ||
Строка 43: | Строка 43: | ||
==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 загрузит свежую версию, обновится и перезапустится. | ||
Строка 92: | Строка 92: | ||
==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. Для описания условий доступны любые поля таблицы.