Питер. 25 июня 2006 года. Прогулка на яхте по финскому заливу.




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *