Питер. 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='\

43 Comments

  1. корум

    маньяки.

    Reply
  2. Молодцы! Вряд ли выпвемся, но зате — на 5 баллов.

    Закрою конфигуратор, буду вспоминать названия фок-и грот-мачт…

    Reply
  3. Очепятки прошу считать фирменным стилем 🙂

    Reply
  4. корум

    Предварительно — поеду. С женой.

    Reply
  5. harleq

    корум, замечательно! я тоже буду с женой

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

    Детей можно ?

    Reply
  7. harleq

    ок, уточним у капитана и сюда ответим

    Reply
  8. harleq

    Детей не то чтобы можно, а нужно. Дети до 12 лет бесплатно.

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

    у меня двое и оба до 12

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

    до какого числа можно думать ?

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

    конечно если буду — то с женой (ну и с дитёнышами)

    Reply
  12. harleq

    к 18 числу желательно определиться, но чем раньше, тем лучше, нам поспокойней будет 🙂

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

    Сколько народу уже ? публикуйте списки

    Reply
  14. Father

    Пока оплативших нет. Есть 15 человек забронировавших места. Список забронировавших выкладывать, на мой взгляд, пока нет смысла.

    Reply
  15. Father

    На сегодня (05.06) забронировали места:

    Алексей Федоров (АЛьФ) с супругой Катей, Сергей Нефедов (NS) с супругой Анной, Степан (Корум) с супругой, Илья Казанцев (sd), Денис Дебедев, Рамиль (BigRoma), GR13, Павел (ДПРО), Доржи (Harleq) с супругой, Николай (Father) с подругой.

    Свободно 10 мест.

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

    погода шепчет 🙁

    плюс 8 за окном

    Reply
  17. Hi !

    Нескромный вопрос.

    Сколько пива (закусок) включено в 1500 руб.?

    😉

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

    Скромный вопрос: сколько водки/конъяка включено в 1500 рублей 🙂

    Reply
  19. Father

    Скромный ответ: Меню будет согласовываться с каждым участником. Предварительное меню: 1.5 литра пива/джина, сок/вода, чипсы, бутерброды (3-4 вида), сухарики.

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

    (с сомнением в голосе) А не дороговато тогда получается ? На Валаам туда и обратно — 3000 р, дак это две ночи + кормежка

    Reply
  21. WWWolfy

    отправли заявку. будем вдвоём.

    Reply
  22. harleq

    Снусмумрик, на самом деле Father привел самый минимум. Постараемся, чтобы все было на уровне, все лишние деньги от аренды пустим на напитки и еду. Я думаю никто голодный или ненапившийся с яхты не уйдет.

    Reply
  23. Father

    Cнусмумрик, денег себе мы на этом мероприятии не делаем.

    Все цены доступны в инете — можно запросто все посчитать.

    Валаам за 3000 руб. это одно койко-место в 4-х местной каюте на нижней палубе и сомнительное питание.

    Или за 1500 руб. крупнейший в России парусный катамаран, знакомая компания, общение вживую, напитки и закуски, ну и т.д.

    Каждый выбирает вариант для себя.

    Reply
  24. Father

    На сегодня свободно 8 мест.

    Reply
  25. Father

    to WWWolfy

    С местами в гостинницах думаю будет проблема, опять же, из-за саммита G-8. Но все-таки постараемся найти хорошее место.

    Думаю, в начале следующей недели будет информация по гостинницам.

    Reply
  26. Father

    Уже осталось 6 мест

    Reply
  27. Father

    Осталось 5 мест

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

    Господа, я ж не обвинял вас, что вы делаете деньги на этом мероприятии !!! Ни в коей мере — просто высказал свои сомнения

    Reply
  29. Father

    to Снусмумрик

    Сомнения приняты и рассмотрены ниже. =)

    Reply
  30. Father

    Осталось 4 места

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

    Блин, в будние дни с работы сразу на футбол бегом.

    Коля, могу купить яндекс.деньги да коды сказать. На сколько это тебе удобней?

    Reply
  32. Father

    в аське

    Reply
  33. Father

    Прогноз погоды на 25 июня: +21, без осадков. Ура.

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

    к сожалению не присоединюсь 🙁

    другие планы

    Reply
  35. Father

    Очень жаль

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

    Рожи то почти все те же 🙂

    Только Вввольфу и не видел 🙂

    Reply
  37. harleq

    🙂 остальные работают

    Reply
  38. harleq

    Завтра встречаемся, 25.06.06 в 12 часов, на выходе из М.»Чкаловская»

    Reply
  39. WWWolfy

    ну теперь на нас все и посмотрели 🙂

    Классно отдохнули и пообщались! Все были просто очарованы водой и мощью катамарана! Некоторые даже отрубились ..

    Reply
  40. Огромное спасибо героическим организаторам!

    Надеюсь на продолжение банкета 😉

    Совсем наглею: ребята, а может вы фотоотчет на дисках сделаете? А то сотни фоток с моим траффиком не скачать 🙁 Думаю, в узком кругу участников эти диски пойдут на ура.

    Reply
  41. dennislebedev

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

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

    Инфостарт, как всегда, молодцы!

    Reply
  43. support

    фотоотчет http://infostart.ru/news.php?id=12

    Reply

Leave a Comment

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