Итоги розыгрыша призов 25 июня 2006 года




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

37 Comments

  1. azernot

    Эх… Жаль, что я уже давно купил КЗК-лайт…. Но всё равно, спасибо!

    Reply
  2. CheBurator

    Блин! Очуметь! Только сегодня рассматривал КПК… Это будет большое подспорье для меня. Если КПК дойдет ло меня 😉 а не загибнет на почтах и пр. — вас ждут еще две совершенно потрясные разработки.. — одна активно обкатывается у меня на фирме (тем, кому интересно — это будет под ТиС), а вторая — универсальное решение…

    Reply
  3. Директор PR отдела

    Чебуратор, твоя обработка принесла ме 0.75 виски 🙂

    Наш с тобой номер — 11 🙂

    Reply
  4. Снусмумрик

    Эх, жаль, что мне не достался КПК ! Но все равно — СПАСИБО ! :-))

    Reply
  5. CheBurator

    11 — это что? У меня любимое число всегда 17 было…

    Reply
  6. Father

    Прошу всех авторов, выигравших призы, выслать на support@infostart.ru Ваши почтовые реквизиты для отправки призов ценной бандеролью почтой РФ.

    Reply
  7. Снусмумрик

    а можно КЗК мне мылом выслать ?

    Reply
  8. CheBurator

    А дойдет?

    Reply
  9. CheBurator

    Если по почте — до меня ж приз месяц идти будет…

    никак нельзя с оказией (может кто едет) в Москву передать — готов подойти .Хотя впрочем, если организаторам/суппорту легче почтой — ща замылим реквизиты…

    Reply
  10. Father

    to Снусмумрик

    Как раз отличный повод для встречи.

    Reply
  11. Father

    to CheBurashka

    WWWolfy получил свой приз дней через 10, т.ч. до Москвы наша почта работает стабильно.

    Reply
  12. CheBurator

    Это радует… будем ждать…

    Reply
  13. Снусмумрик

    А почему у Чебуратора есть аватар, а у меня нет ?

    требую справедливости 🙂

    Reply
  14. Снусмумрик

    to Father

    А до скольки работаете ?

    Заеду на след. неделе. На этой видимо буду не в состоянии. Вчера начал отмечать свой юбилей 🙂

    Reply
  15. support

    Каждый может сделать аватар, в персональном меню раздел «Фото»

    Reply
  16. Снусмумрик

    нет там у меня такого раздела !

    Reply
  17. support

    У всех есть, сейчас сделали красным новые разделы, чтобы заметней были.

    Reply
  18. Снусмумрик

    (рыдаю) нету !!! чесно нету !!!

    Reply
  19. Снусмумрик

    могу выслать скрин на мыло

    Reply
  20. support

    вышли на support@infostart.ru

    Reply
  21. Снусмумрик

    выслал

    Reply
  22. support

    Разбираемся, дали задание веб-программисту

    Reply
  23. CheBurator

    У Снусмумра отстойный браузер (надеюсь, что не Опера 😉 тянет из кэша старую страницу!

    Reply
  24. Снусмумрик

    точно, самый отстойный — IE 🙂

    Reply
  25. Снусмумрик

    почистил кэш и даже куки.

    ноль эмоций 🙁

    Reply
  26. CheBurator

    В персональное мень зашел..? 😉

    Reply
  27. Снусмумрик

    Издеваешься ?

    Reply
  28. CheBurator

    Вылечил?

    Reply
  29. support

    Исправили. Ошибка была связана с тем, что был выбран стиль форума «Скорость».

    Reply
  30. Снусмумрик

    работает !

    Reply
  31. mdzen

    Всех ПОЗДРАВЛЯЮ !!! Ну и себя любимого.

    При-и-и-ято, черт возьми.

    Reply
  32. azernot

    Всё! Я получил коробочку на почте.

    Reply
  33. АЛьФ

    Можешь ее теперь загнать по спекулятивной цене 🙂

    Reply
  34. azernot

    Т.е. официально разрешаешь? 😉

    Reply
  35. АЛьФ

    Кто ж это запретить может?! Это, понимаешь, не я, а Закон разрешает 🙂

    Reply
  36. Снусмумрик

    эх, все нет времени приз забрать ! до скольки работаете ?

    Reply
  37. support

    давно ждем :), давай договоримся в аське: 74-474-973

    Reply

Leave a Comment

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