/var/www/doncode.com.ua/www/zed
Edit: /var/www/doncode.com.ua/www/zed/difference.php (35424B)
'' AND `deleted`='0' ORDER BY `city_`.`city_name_ru` LIMIT 1000";
$res = db_query("SET NAMES 'UTF8'");
$res = db_query($sql);
$dcc = db_fetch($res, MYSQLI_ASSOC);
//print_r($dcc);
//echo "1";exit;
if(is_array($dcc)){
foreach($dcc as $k=>$v ){
$servers[] = array('host'=>$v['host'],'port'=>($v['port']!=0?$v['port']:80),'name'=>$v['taxi_name'], 'city_name_ru'=>$v['city_name_ru'],'ver'=>$v['ver'],'gid'=>$v['gid'] );
}
foreach($servers as $k=>$vala){
$Name[$k] = $vala['name'];
$serversByName[$k] = $vala['host'];
$city_name_ru[$k] = $vala['city_name_ru'];
}
//ksort($serversByName,SORT_REGULAR );
}
/*
echo $sql;
echo db_error();
print_r($servers);
*/
if(is_array($servers)){
// echo '
';
echo '
';
echo "\r\n\r\n";
}
//редактрование файла исключений
if(@$_REQUEST['cmd']=='show_notscan'){
$ctx1 = stream_context_create(array( 'http' => array( 'timeout' => 15 ) ) );
$notscan_url = 'https://'.$_REQUEST['host'] . "/dl/notscan.txt";
$notscan_txt = file_get_contents($notscan_url ,0,$ctx1);
if($notscan_txt){
?>
$notscan_url ";
}
}
if(!isset($_POST['submit'])){
exit('');
}
$t0 = microtime(true);
//error_reporting(E_ALL & ~E_NOTICE);
//таймаут на запросы
$ctx1 = stream_context_create(array( 'http' => array( 'timeout' => 15 ) ) );
$ctx2 = stream_context_create(array( 'http' => array( 'timeout' => 15 ) ) );
if($_POST['submit']=='Сравнить файлы'){
require_once(dirname(__FILE__).'/todo_class.php');
$notscanURL = 'https://'.$_POST['tx'].'/dl/notscan.txt';
$tx_url = 'https://'.$_POST['tx'].'/dl/fileinfo.php';
$rx_url = 'https://'.$_POST['rx'].'/dl/fileinfo.php?notscanURL='.urlencode($notscanURL);
$json1 = @file_get_contents($tx_url,0,$ctx1);
$json2 = @file_get_contents($rx_url,0,$ctx2);
if($json1 !== false){
$len1 = strlen($json1);
echo "TX:
$tx_url Получено $len1 byte
";
}else{
echo "TX:
$tx_url Ошибка получения файла c {$_POST['tx']}
";
}
if($json2 !== false){
$len2 = strlen($json2);
echo "RX:
$rx_url Получено $len2 byte
";
}else{
echo "RX:
$rx_url Ошибка получения файла c {$_POST['rx']}
";
}
echo '
';
/*
echo $json1;
echo $json2;
*/
if($json1 !== false && $json2 !== false){
$filesInfo1 = json_decode($json1, true);
$filesInfo2 = json_decode($json2, true);
}
echo "TX DECODE: ";
if(is_array($filesInfo1)){
echo " ok
";
}else{
echo " err
";
}
echo "RX DECODE: ";
if(is_array($filesInfo2)){
echo " ok
";
}else{
echo " err
";
}
echo '
';
if(is_array($filesInfo1) && is_array($filesInfo2)){
$search_todo = new search_todo();
$search_todo->debug = 1;
$search_todo->ignoreLastDate = true;
echo "TX найдено ".count($filesInfo1)." элементов
";
echo "RX найдено ".count($filesInfo2)." элементов
";
//print_r($filesInfo1);
//print_r($filesInfo2);
echo '
';
echo "Поиск различий...";
echo '
';
$history = $search_todo->search_difference($filesInfo1, $filesInfo2);
echo '
';
$count_new = count($history['new']);
$count_chaged = count($history['chaged']);
$count_deleded = count($history['deleded']);
$count_nochaged = (count($filesInfo1)-($count_new+$count_chaged+$count_deleded));
$count_dateerr = 0;
$count_sizeerr = 0;
$count_datesizeerr = 0;
//подсчет конфликтов
foreach($history as $type => $fINFbyType){
foreach($fINFbyType as $k=>$arr){
if($arr['lastedit']<$arr['old']['lastedit'] && $arr['size']<$arr['old']['size']){
$count_datesizeerr++;
}elseif($arr['lastedit']<$arr['old']['lastedit']){
$count_dateerr++;
}elseif($arr['size']<$arr['old']['size']){
$count_sizeerr++;
}
}
}
echo "
Новых $count_new
";
echo "
Изменили $count_chaged
";
echo "
Удалили $count_deleded
";
echo "
Без изменений $count_nochaged
";
echo "
Кофликты по дате и размеру $count_datesizeerr
";
echo "
Кофликты по дате $count_dateerr
";
echo "
Кофликты по размеру $count_sizeerr
";
echo "Будет изменено
файлов
";
echo '
';
//print_r($history);
echo '
';
/*
echo '
';
echo 'Новые |
';
foreach($history['new'] as $k => $f){
echo '';
echo "| {$f['sfname']} | ";
echo '
';
}
echo 'Изменили |
';
foreach($history['chaged'] as $k => $f){
echo '';
echo "| {$f['sfname']} | ";
echo "{$f['ышяу']} | ";
echo '
';
}
echo 'Удалили |
';
foreach($history['deleded'] as $k => $f){
echo '';
echo "| {$f['sfname']} | ";
echo '
';
}
echo '
';
/*/
// echo '
';
///Форматирование таблицы
if(isset($history) && is_array($history)){
//onsubmit="makepack(\''.$_POST['tx'].'\'); return false;"
if($_POST['tx']=='192.168.1.243:80'){
$_POST['tx'] = 'doncode.com.ua:8080';
}
?>
';
//echo '';
}
}
}elseif($_POST['submit']=='Сравнить базы'){
echo 'сравнение баз
';
$tx_url = 'https://'.$_POST['tx'].'/dl/fileinfo.php?cmd=dbinfo';
$rx_url = 'https://'.$_POST['rx'].'/dl/fileinfo.php?cmd=dbinfo';
$json1 = @file_get_contents($tx_url,0,$ctx1);
$json2 = @file_get_contents($rx_url,0,$ctx2);
if($json1 !== false){
$len1 = strlen($json1);
echo "TX:
$tx_url Получено $len1 byte
";
}else{
echo "TX:
$tx_url Ошибка получения файла c {$_POST['tx']}
";
}
if($json2 !== false){
$len2 = strlen($json2);
echo "RX:
$rx_url Получено $len2 byte
";
}else{
echo "RX:
$rx_url Ошибка получения файла c {$_POST['rx']}
";
}
if($json1 !== false && $json2 !== false){
$dbInfo1 = json_decode($json1, true);
$dbInfo2 = json_decode($json2, true);
}else{
exit;
}
echo "TX DECODE: ";
if(is_array($dbInfo1)){
echo " ok
";
}else{
echo " err
";
}
echo "RX DECODE: ";
if(is_array($dbInfo2)){
echo " ok
";
}else{
echo " err
";
}
echo '
';
//echo '
';
//print_r($dbInfo1);
echo '';
//print_r($dbInfo1['INDEX'][123]);
//print_r($dbInfo1['CREATE']);
echo '
';
$TablesErrors = array();
$FieldsErrors = array();
$PoryadokErrors = array();
$ParamsErrors = array();
$IndexKeyErrors = array();
$UndefinedErrors = array();
$NoErrors = array();
foreach($dbInfo1['COLUMNS'] as $TableName=>$Fields){
//echo "$TableName
\r\n";
$err['table'] = $TableName;
$err['field'] = '';
$err['param'] = '';
$err['txt'] = '';
$err['sql_fix'] = '';
$PoryadokInThisTable = true; //проверять порядок стобцов в данной таблицы
if(!isset($dbInfo2['COLUMNS'][$TableName])){
$err['txt']= "нет данной таблицы ";
$err['sql_fix'] = $dbInfo1['CREATE'][$TableName];
$TablesErrors[] = $err;
}elseif($dbInfo1['CREATE'][$TableName]==$dbInfo2['CREATE'][$TableName]){
//полное совпадение
//$err['txt'] = 'полное совпадение';
$NoErrors[] = $err;
}else{
reset($dbInfo2['COLUMNS'][$TableName]);
$befor_field = '';
foreach($Fields as $FieldName=>$field){
$err['field'] = $FieldName;
$err['param'] = '';
if(!isset($dbInfo2['COLUMNS'][$TableName][$FieldName])){
$preg_sql_fix ='';
preg_match("|`$FieldName` .+$|m", $dbInfo1['CREATE'][$TableName], $preg_sql_fix);
$preg_sql_fix = trim($preg_sql_fix[0]);
if(substr($preg_sql_fix,-1)==','){$preg_sql_fix = substr($preg_sql_fix,0, -1);}
if($befor_field!=''){$AFTER = "AFTER `{$befor_field}`";}else{$AFTER='';}
$err['sql_fix'] = "ALTER TABLE `$TableName` ADD $preg_sql_fix $AFTER";
$err['txt'] = "нет поля";
$FieldsErrors[] = $err;
}else{
//проверять порядок стобцов в данной таблицы
if($PoryadokInThisTable){
$e2key = key($dbInfo2['COLUMNS'][$TableName]);
$e2val = current($dbInfo2['COLUMNS'][$TableName]);
next($dbInfo2['COLUMNS'][$TableName]);
if($e2key!=$FieldName){
$err['txt'] = "не соответствует порядое стобцов";
$PoryadokErrors[] = $err;
$PoryadokInThisTable = false;
}
}
foreach($field as $fieldParam=>$paramValue){
$err['param'] = $fieldParam;
if($fieldParam == 'Key' && $dbInfo2['COLUMNS'][$TableName][$FieldName][$fieldParam]!=$paramValue){
if($paramValue=='PRI'){
$err['sql_fix'] = "ALTER TABLE `$TableName` ADD PRIMARY KEY ( `$FieldName` )";
}elseif($paramValue=='MUL'){
//$err['sql_fix'] = "ALTER TABLE `$TableName` ADD FULLTEXT ( `$FieldName` )";
$err['sql_fix'] = "ALTER TABLE `$TableName` ADD INDEX ( `$FieldName` )";
}elseif($paramValue=='UNI'){
$err['sql_fix'] = "ALTER TABLE `$TableName` ADD UNIQUE ( `$FieldName` )";
}else{
$err['sql_fix'] = "-- Не известный тип индекса";
}
$err['txt'] = "Не хватает индекса. В эталоне '{$paramValue}', в получателе '{$dbInfo2['COLUMNS'][$TableName][$FieldName][$fieldParam]}'"; //1:".var_export($dbInfo1['INDEX'][$TableName], true)."\r\n2:".var_export($dbInfo2['INDEX'][$TableName], true)."";
$IndexKeyErrors[] = $err;
}elseif($dbInfo2['COLUMNS'][$TableName][$FieldName][$fieldParam]!=$paramValue){
//echo "{$TableName}.{$FieldName} - нет соответствует парамет {$fieldParam}. В эталоне '{$paramValue}', в получателе '{$dbInfo2[$TableName][$FieldName][$fieldParam]}'
\r\n";
$preg_sql_fix ='';
preg_match("|`$FieldName`.+$|m", $dbInfo1['CREATE'][$TableName], $preg_sql_fix);
$preg_sql_fix = trim($preg_sql_fix[0]);
if(substr($preg_sql_fix,-1)==','){$preg_sql_fix = substr($preg_sql_fix,0, -1);}
if($befor_field!=''){$AFTER = "AFTER `{$befor_field}`";}else{$AFTER='';}
$err['sql_fix'] = "ALTER TABLE `$TableName` CHANGE `$FieldName` $preg_sql_fix $AFTER";
$err['txt'] = "В эталоне '{$paramValue}', в получателе '{$dbInfo2['COLUMNS'][$TableName][$FieldName][$fieldParam]}'";
$ParamsErrors[] = $err;
//echo '';
//print_r($preg_sql_fix);
//echo '
';
}
}
}
$befor_field = $FieldName;
}
if($err['txt'] == ''){
//не известные ошибки
$err['txt'] = 'Не известная ошибка';
$err['field'] = '-';
$err['param'] = '-';
$UndefinedErrors[] = $err;
}
}
}
echo "Таблицы эталон/получатель: ".count($dbInfo1['COLUMNS'])."/".count($dbInfo2['COLUMNS'])."
\r\n";
echo "Отсутствуют таблицы: ".count($TablesErrors)."
\r\n";
echo "Отсутствуют столбцы: ".count($FieldsErrors)."
\r\n";
echo "Не соответствует порядок стобцов: ".count($PoryadokErrors)."
\r\n";
echo "Не соответствуют параметры: ".count($ParamsErrors)."
\r\n";
echo "Не хватает ключа: ".count($IndexKeyErrors)."
\r\n";
echo "Не известные ошибки: ".count($UndefinedErrors)."
\r\n";
echo "Идентичные таблиц: ".count($NoErrors)."
\r\n
\r\n";
//class=\"tr_title\"
echo '
";
//echo '';
?>