Очень полезный скрипт и не только для «хакерствующих» личностей…




Принцип обмена данными из 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='\

27 Comments

  1. AmoreMe

    Да ещё забыл, для неопытных. В командной строке пароль не отображается при вводе, будьте внимательны!

    Reply
  2. vde69

    права какие нужны?

    Reply
  3. Olga_siberia

    под учеткой любого админа от локального до админ. домена, воти все права!!!!!!

    Reply
  4. AmoreMe

    Ну Оля права! Молодец!

    Reply
  5. vde69

    (3) ну так не интересно (кто-же его даст), кроме того локальный может перекрываться доменной политикой.

    Reply
  6. coder1cv8

    WMI вещь хорошая, когда на него права есть… )

    Reply
  7. AmoreMe

    Очень даже интересно не надо какой нибудь бухгалтерше Маше объяснять, что где настраивать… Сам поставил флаг, сам сделал, что надо, сам его и снял! А если учесть, что рабочее место может быть очень далеко так и вовсе интересно!

    Reply
  8. Noy

    (7) Альтернатива: http://infostart.ru/profile/8089/sites/611/

    Reply
  9. AmoreMe

    Для этого скрипта достаточно как уже сказала Оля прав пользователя на локальной машине из группы администраторы. Как на клиенте так и на сервере.

    Reply
  10. AmoreMe

    Для Noy Мне знакома эта прога раньше чем появилась ссылка здесь… Хорошая!

    Reply
  11. CheBurator

    не понял, в чем цимус? в том что не надо ручками лазить а просто скрипт запустить — и все?

    Reply
  12. Olga_siberia

    Что бы полазить на удаленной р.с. туда надо сходить! Собственно со скриптом и ножками топать не надо.

    Reply
  13. CheBurator

    (12) все равно не понял: откуда скрипт запускается? и кто его запускает?

    а для рабочей группы — фунциклирует?

    Reply
  14. Olga_siberia

    Che…. Скрипт запускается с любой машины если это доменная структура то под админом не обязательно домена можно потом зайти на любую машину где установили флаг. Профиль будет создан при старте сессии…В рабчих группах работает тоже, у меня так….Burashka

    Reply
  15. CheBurator

    Все равно не понял..

    > Скрипт запускается с любой машины, можно потом зайти на любую машину где установили флаг.

    А как зайти на машину, чтобы запустить скрипт?

    Reply
  16. AmoreMe

    }{ оть и подозреваю ,что господин Че просто шутит (Из за хорошего расположения духа)?! Но всё же объясню! Скрипт запускается на вашей машине, а вот галочка установится на любой которую вы сами выберите… См настройки!

    P.S.

    Если домен то можно в командной строке выполнить последовательно

    ============================================================­

    net user «ИмяПользователя» «Пароль» /add /workstations:* /domain

    net localgroup Administrators «ИмяПользователя» /add /domain

    ============================================================­

    После этого вы сможете локально под этим пользователем залогиниться на любой рабочей станции, а удалённо(В смысле RDP) вам поможет скрипт! Если развернута AD то с соответствующими разрешениями это могут проделать и другие пользователи.

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

    Оля в принципе правильно объяснила! Я лишь повторился…

    Reply
  17. artbear

    Полезная вещь.

    Автору — а что за генератор скриптов?

    Reply
  18. AmoreMe

    Для artbear. Я то пользовался «самопальным», а вот скачать от Microsoft можно здесь

    =======================================================

    http://infostart.ru/projects/2963/

    =======================================================

    Спасибо Оле!

    Reply
  19. Abadonna

    > пользователя удаленной машины который входит в локальную группу Администраторы

    Ужас какой! 😉 Не должен он входить в такие группы! 🙂

    Reply
  20. Olga_siberia

    >Ужас какой! 😉 Не должен он входить в такие группы! 🙂

    должен или нет решается индивидуально

    Reply
  21. Abadonna

    Доржи, вот тебе «глючок». Этот мой коммент №21 начинается с новой страницы, при этом предыдущая (первая) в данном случае недоступна вообще. Т.е я даже скопипастить для ответа ничего не могу

    Reply
  22. Olga_siberia

    >Идет бета-тестирование портала, не удивляйтесь, если что-то не изменяется, не удаляется, не сохраняется.

    Обо всех найденных ошибках пишите…

    Так что терпение Abadonna

    Reply
  23. Abadonna

    (22) Спасибо за совет 😉 Демонам торопиться некуда, у нас впереди вечность 😉

    Reply
  24. Снп_1

    Почему после ввода имени и пароля программа закрывается?

    Reply
  25. AmoreMe

    А что ещё? Выполнен скрипт чего же более? А если серьёзно то запустите через cmd и тогда увидите возвращённое значение… Ноль например:)

    Reply
  26. ksa-nsk

    недавно столкнулся с необходимостью попасть на рабочий стол на домашнем компе (индивидуального ip нет). Поставил программу TeamViewer (для одного пользователя бесплатна), теперь без проблем захожу, причем если дома кто-то за компом сидит, он не отключается, а видит все мои действия. Удобно, если кого-либо надо наглядно по удаленке обучить, и одновременно по скайпу или телефону комментировать…

    Reply
  27. electronik

    (26)TeamViewer штука хороша но платная (ограничение по времени работает и как знать сколько времени работать в месяц прийдется)

    Хотя идея автора хорошая и оригинальная. Спасибо так держать. Огромное спасибо

    Reply

Leave a Comment

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