<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Браво, маэстро… Ковырял демку больше часа, строковые константы МД.Обработки.РазборГЛ расшифровал но понять остальные переменные и логику программы сложнее, чем написать свой код. Кстати, какое мыло для связи?
(мой ящик tomailme@yandex.ru)
Просто замечательный способ зашифровать свои данные! Огромный респект!! Единственное, чтобы я посоветовал, функцию дешифровки вставлять не в самом начале, а где-нибудь в середине модуля и строковые константы разбивать на бОльшее количество кусков (чтобы и желания не возникало возиться с этим текстом).
Молоток!!
есть еще шифровка модуля с помощью переименовки всех переменных и функций
https://infostart.ru/public/13860/
«На злобу дня» Дома поковыряю. Особенно как поведет себя на конфе где 1С++ прикручен.
Вопросс автору (немного не в тему), не принимал ли он участия в разработке Новейшего Отчета, или его разработчики просто применили твой шифровальщик? Пробовал расковырять: в принципе возможно, но тоскли-и-и-во…
Да, шифратор был создан специально для защиты Новейшего отчета.
+1
Тогда усе понятно — то-то смотрю: знакомые крякозяблики. С чистой совестью добавляю рейтинг.
И еще вопросс: а обратный ход у шифровальщика есть? Или это уже будет называтся готовый кряк?
обратного хода нет, этот процесс шифрования необратим
Еще как обратим 🙂
Естественно, не имена переменных, но удобочитаемый текст можно сделать.
не знаю насколько он станет удобочитаемый
Достаточным для разбора алгоритма. Если после этого немного ручками доработать, то станет вообще как новенький.
смотря какой алгоритм, и его количество
Я, например, убрал для начала все символы новой строки(получилась длинющая строка), затем после каждой точки с запятой опять их вставил, а потом в конфигураторе уже ручками настучал по клаве Энтер и редактор сам подформатировал текст. Что-то более суръезное писать было в лом. Получилось не ахти что, но вполне читаемое.
Вообще, сначала надо решить, от чего защищаем. От копирования продукта?
Так для этого шифратор не предназначен
От изменения кода? Нет, тоже можно разобраться.
Шифратор 1С защищает от копирования алгоритма. Просто в таком случае, разобраться с данным алгоритмом сложнее, чем написать свой собственный, притом, если множество процедур и функций и продукт достаточно сложный, то разбираться с зашифрованным кодом, это тоже самое, что открыть ассемблер. Никто же не берет ассемблер в качестве основы для своей разработки, в любом случае, нужен читаемый алгоритм программы.
«смотря какой алгоритм, и его количество»
ИМХО любой.
«Никто же не берет ассемблер в качестве основы для своей разработки, в любом случае, нужен читаемый алгоритм программы.»
Вот это ты зря. На ассемблере до сих пор некоторые умельцы даже операционки пишут.
сам то как потом расшифруешь?
(20)>сам то как потом расшифруешь?
А зачем самому расшифровывать? Конечно, если мозгов нет и исходники не сохранил — тогда чуток повозиться придется
Отличная вещь! Обратим — не обратим. Глупости все это. Любая защита подразумевает определенный уровень подготовки взломщика. Есть медвежатники для которых вообще не существует «не ломаемых» сейфов, так что теперь отменим все сейфы нафиг? Пусть кто-нибудь расшифрует не одну ert-шку, а всю конфу, зашифрованную данным продуктом, да еще сделает ее удобочитаемой, а потом посмотрит на часы…..
Однозначно +1
+1
с классами 1с++ не работает однако …
Большое Спасибо!
Очень полезная обработка
А зачем шифровать
Можно все сделать стандартами средствами Windows Server
очень интересная и полезная обработка,спасибо,очень кстати
Спасибо автору!
Пригодилась и не раз!!
Круто…