"Зашумление" справочной информации для v8




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

15 Comments

  1. IronDemon

    Чем лучше ИзменениеКонфиденциальнойИнформации.epf с ИТС?

    Reply
  2. YVolohov

    лучше все таки шифровать, чем изменять безвозвратно

    Или еще можно заменять значения разной ерундой, а реальные значения выгружать скажем в текстовый файл с записью места, откуда эти значения были взяты. Затем, после ухода проверки значения загружаются из файла обратно.

    Reply
  3. wolder

    (1) Похоже, но моя по проще.

    (2) Тут добавляется не скромный по времени и ресурсам процесс записи во внешний файл. А идея хорошая.

    Reply
  4. wirg

    Бред, это не зашумление, а разрушение. Лучше иметь электромагнит мощный и жестаки на него, когда налоговая входит кнопка и все. А копии на фтп хранить или полную копию УРБД огранизовать, если вас правоохранительные органы не любят.

    Reply
  5. kalinovsky

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

    Reply
  6. sound

    У нас для таких случаев выделили целого программиста, он уже больше месяца чо-то колбасит, ну и уж конечно не на 1С.

    А насчет того, что «любое удаление — восстанавливается», ремарка — это смотря как удалять:), ну и скажем «восстанавливается» с определенным процентом вероятности (опять же смотря после какого и скольки кратного! удаления). Маздай конечно много «на горячку» по живому резать не даст, это лежит глубоко внутри их философии, но как говорится было бы что ломать 🙂

    Reply
  7. wolder

    Все верно господа (4,5,6) — но эта обработка всего лишь вариант к достижению общей цели.

    Reply
  8. PowerBoy

    Бред, у меня баз 10-ок и к каждой еще резервных копий заархивированых столько ко же и сколько времени понадобиться чтобы все это зашифровать?

    Reply
  9. cs25

    Идея конечно не нова, но … За обработку СПС !!!

    Reply
  10. bellnau

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

    Reply
  11. coder1cv8

    Такое чувство, что на дворе лихие 90-е, все думают как бы спрятать, зашифровать, кнопку самоуничтожения прикрутить… Цивилизованно надо вести бизнес и не будет таких проблем!…

    Reply
  12. sound

    (11) действительно, осталось только эту ветку распечатать и наклеить начальству на дверь — тото они пристыдятся и начнут вести честный образ жизни 🙂

    Reply
  13. vasiliy_b

    Вообще такие программки вещь полезная, например когда Вы хотите передать базу через открытие источники FTP например.

    А второй (расшифровывающий) файл можно отправить другим источником(почтой например) тогда шанс перехватить злоумышленником оба файла, значительно уменьшается.

    И еще обработка ИзменениеКонфиденциальнойИнформации.epf как-раз для этого. Только ее задача скрыть информацию, но оставить проблеммы с базой(если таковые есть и Вам надо передать эту базу в 1С например)

    Reply
  14. wolder

    (8) — Конешь если их 10-ок, но ведь не у всех же их столько…. 🙂

    (10) — Прятать надо, причем даже туда низная куда. Реальная история, у меня на предыдущей работе сделали так, купили дисковой массив с интерфейсом по WiFi,директор его сам взял и кудато по зданию поставил, ну а мы лили лили — заливали… 🙂

    (11) и (12) … увы, решить и установить этот рядовому программеру несуждено!

    (13) … я просто напомню, что моя обработка всего лишь «зашумляет» — безразвратно, т.е. безвозвратно, но это только пока! Дело в том, что я ещё в школе на КуБейсике создавал приложение по шифрованию аски кода, поробую вооплаить это вновь спустя 12 лет 🙂

    Reply
  15. kalinovsky

    (11)>Цивилизованно надо вести бизнес…

    Может сначала цивилизованные законы пусть напишут…

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *