Админы и программисты




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

26 Comments

  1. CheBurator

    5 баллов! Посмеялся от души.

    Reply
  2. vasilykushnir

    Теперь у меня есть оправдание, почему я пью много пива — проггер и админ в одном лице. Вот и приходится за двоих… Распечатал — отнесу зам. директора, чтобы не прикалывался, что я постоянно выпимши.

    Reply
  3. gubsky

    (2) улыбнуло:)

    Reply
  4. JohnyDeath

    (2) Василий, а ты ещё с предложением о включении стоимости n-го числа бутылок к з/п подойди. Вдруг прокатит! 😉

    Reply
  5. she

    очень понравилось

    Reply
  6. nikitan

    (2) аналогично, но благо жена держит руку на пульсе……..

    Reply
  7. vasilykushnir

    (4) Ага меня и так недавно вз…и (по смыслу взули). Строгач в трудовую и 100% премии в минуса.

    Reply
  8. vasilykushnir

    Еще дабавлю:

    Если средней упитанности (как я — 95 кг) — это Совместитель (админ и программист в одном лице). И если Программист во мне начинает думать мысль, то Админ сразу же — А нафига? Лучше пива выпей. И тогда сразу вдвойне пофиг — ибо пиво пьют, как уже было сказано, оба — и Админ и Программист. Они у меня в этом вопроссе хорошо ладят…

    Reply
  9. Abadonna

    95 кг — СРЕДНЕЙ упитанности??? :)))))))))))))))))

    Reply
  10. vasilykushnir

    Ну не худой же!

    Reply
  11. JohnyDeath

    А мне про мысль и курить понравилось. Когда мысль — сигарета выкуривается за минуту, в остальных же ситуациях — около 4-х! 😉 Причем самые нормальные мысли приходят именно в эту минуту ))

    Reply
  12. Shaman100M

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

    Reply
  13. JohnyDeath

    Ну в общем-то да, сигарета — это просто предлог отвлечься. А бросать надо АднозначнА!

    Reply
  14. vasilykushnir

    (13) Угум. И еще пиво не пить…

    Можно, конечно, не пить, не курить, не шлятся по бабам — и жизнь станет пресной, скучной и бессмысленной.

    — Прикинь, курение сокращает жизнь на 30 лет.

    — А сколько тебе сейчас?

    — 40.

    — Вот видишь. А если б не курил — было бы 70…

    Reply
  15. Abadonna

    — Вам бы надо было травки попить..

    — Ага! Ты еще скажи шприцов покурить!

    Reply
  16. Shaman100M

    (14) Ну не програмер я, чего поделаешь. 🙂 Предпочитаю пиву коньячок с сыром.

    Reply
  17. vasilykushnir

    (16) Да уж от коньячка даже трезвенники не откажутся… Грешен — сам его, собаку, полюбляю. Предпочтение отдаю молдавским не моложе 8 лет — армянские сильно накладно… — никак не получается купить бутылочку и по рюмочке в день для настроения: не успеешь глазом моргнуть — бутылка уж пустая. Все хорошее рано или поздно кончается — и снова приходится бежать в магазин…

    Reply
  18. vasilykushnir

    Эээх… А после коньячка пивасиком шлифануть, да с хорошенькой сигареточкой (к примеру Черный Капитан с шоколадным привкусом) — хоть деньги на ветер не выброшены…

    Reply
  19. JohnyDeath

    (18) моежт ты так хотел написать:

    «…да с хорошенькой брюнеткой (к примеру Черненькой Капитанкой с шоколадным привкусом) — хоть деньги на ветер не выброшены…

    ))))

    Reply
  20. vasilykushnir

    (19) Это по умолчанию имелось в виду…

    Reply
  21. coder1cv8

    (14) Глупо сравнивать сигарету с выпивкой или бабами. Так как от сигареты (в отличии от второго и третьего) кайф вымышленный… Просто организм получает дозу наркотика, после голодания. Может и избитое сравнение, но это всё равно что снять неудобные туфли, после целого дня, сомнительный кайф, если можно носить удобную обувь… Гораздо больше удовольствия получаешь, когда чувствуешь переполняющую тебя энергию, после того как откажешься от этой бесполезной привычки. 🙂

    Reply
  22. Venera19

    Понравилось, молодец!

    «Мне сорок пять лет. Все нормальные люди давно застрелились или хотя бы спились. А я даже курить и то чуть не бросил. Хорошо, один поэт сказал мне:

    – Если утром не закурить, тогда и просыпаться глупо…

    ….В любой ситуации необходима какая то доля абсурда.» (с) Довлатов С.

    Reply
  23. Shaman100M

    (21) Присоединяюсь.

    Имхо, расширить тему: «Админы и программисты, ахтунг! no smoking!»

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

    Reply
  24. banderas

    Да — уж!!! Это, точно подмеченно…)))

    Reply
  25. O-Planet

    Стиль суперский, и очень точно выдержан.

    Reply
  26. roger

    Узнаю себя

    Reply

Leave a Comment

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