На конкурс к 8 Марта.




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

38 Comments

  1. Шёпот теней

    отличный путеводитель — как надо делать…!!!

    CheБурашке на заметку…:)))

    воооот…

    Reply ↓
  2. larisab

    Спасибо!

    Reply ↓
  3. CheBurator

    (1) поздно спохватились… статья написана по объявленному мной «конкурсу».. 😉

    Reply ↓
  4. malulig

    Подверждение тому, что Инфостарт + Мозг = убыстрение:)

    Поставлю +

    Reply ↓
  5. Шёпот теней

    (3) CheБурашка… мы на то и намекаем… что посмотри какой прекрасный предендент на почётный трофей твоего конкурса….

    воооот…

    Reply ↓
  6. alexk-is

    …а почему все ссылки мертвые? 🙁

    Reply ↓
  7. O-Planet

    (6) Потому что надо ставить пробелы между скобками

    Reply ↓
  8. larisab

    (6) (7) вот, ожили:-))))

    Reply ↓
  9. bjjzpp

    5 балов

    Reply ↓
  10. CheBurator

    Напоминаю, что статьи, аналогичные данной, принимаются как «оплата» для получения разработки в акции к 8 Марта, см.здесь: http://www.infostart.ru/forum/forum1/topic8362/messages/

    Reply ↓
  11. venger

    (0) Плюс, канешна. Но, как-то проявился момент в статье… Вот смотрите, пришло в голову просто, а если б все эти работы/обработки, что приведены в статье, были б платные (ну, по 10$)? Не думаю, что все б так лихо тогда можно было сделать, как описано в статье… А автор статьи, как раз характерный представитель аудитории ИС… И вряд ли он (она) бы их тогда покупал(а), может одну-две, да и то, сомнения, так пожно половину суммы отдать ИС’у, что заказчик выложит за работу:-)

    Reply ↓
  12. larisab

    (11)Ну, во-первых не он (она), а она, во-вторых, что- то память у vengerа короткая, мы с тобой «тарифы» вместе делали, ты еще помнится ссылочку на мой профайл кинул, да по e-mail, перекинулись письмами;-))).

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

    В — четвертых, скачивают все, ресурс такой, я тоже, но благодарю авторов, и эта статья тому подтверждение:-)))

    Reply ↓
  13. venger

    (12) Помню-помню, отчего ж:-) Я просто подчеркнул, что я счас о любом человеке говорю. И в основном о том, что ценность ИС как раз в большом кол-ве бесплатных (и это нормально). И к тому, что как только многое станет платным, многие уйдут, так как нельзя будет пользоваться как «справочником» с примерами в своей работе. Просто эт к разговорам о том, как получить прибыли с портала.

    Reply ↓
  14. larisab

    (13)>многие уйдут, так как нельзя будет пользоваться >как «справочником» с примерами в своей работе

    Интересная мысль, что — что а справочником и не пахнет, во всяком случае в моей работе, большинство обработок, скаченных здесь переделывались, хотя бы потому что для Казахстана не подходят, и не только поэтому, а еще и потому, что задачи все индивидуальные и очень непростые, и может быть я плохо описала, что работа была срочная и «изобретать велосипед» некогда было…

    Чем мне нравится портал, так это тем, что с ним РАБОТАТЬ можно, а не только флеймом заниматься…

    Reply ↓
  15. venger

    (14) > что — что а справочником и не пахнет

    Это для пользователя не пахнет, у него если не заработало, он сделать то ничего не может, а для программиста — можно переделать под себя, можно доработать, можно посмотреть подходы, идеи, мысли. Только не шибко структурированный и с не шибко развитыми системами поиска, навигации и т.п., но то, что есть сейчас — и портал, и имя, и коллектив и база разработок и разрабов — это, надо отдать им должное, тоже результат вполне впечатляющий!!! Молодцы ребята — это однозначно!!! Но только не ждите, что мы, хоть Вас и любим, будем постоянно об этом говорить, в жизни тоже ж так:-) Мы скорее будем ворчать на баги, но это ведь любя:-)

    Reply ↓
  16. WiseSnake

    (14) > Чем мне нравится портал, так это тем, что с ним РАБОТАТЬ

    Абсолютно верно. Этим он пока и привлекал людей, но чем больше людей тем больше флуда, тем меньше нормальных людей и больше флудеров. Сейчас, ИМХО, переломный период в жизни портала и если владельцы упустят момент, то инфостарт превратиться в еще одну мисту, с которой невозможно РАБОТАТЬ!

    Уже десятки тем существует по этому поводу, но воз и ныне там.

    Возможно Вашу статью через пол года — год найдет какой нибудь «новобранец» и скажет еханый бабай вот клево здесь раньше было, а теперь в этой «куче» ничего нельзя найти… и посоветоваться не с кем…

    ЗЫ: Наболело.

    Reply ↓
  17. larisab

    (15)>…хоть Вас и любим…:-)))))

    Reply ↓
  18. venger

    (16) > Возможно Вашу статью через пол года — год найдет какой нибудь «новобранец» и скажет еханый бабай вот клево здесь раньше было, а теперь в этой «куче» ничего нельзя найти… и посоветоваться не с кем…

    Это проблема всего И-Нета, всех поисковиков и каталогов. И что, ведь никто не предлагает ввести цензуру на весь И-нет в связи с этим. Думают, улучшают поисковики, думают над системами data mining, много чего думают. Я про человечество, но ведь не говорят об ограничении кол-ва пользователей И-нета или сайтов И-нета. Ведь нет?

    Reply ↓
  19. venger

    (17) Это я снаружи вредный, но внутри добрый и пушистый, ранимый и нежный:-))

    Reply ↓
  20. WiseSnake

    (18) Это проблема всего И-Нета, всех поисковиков и каталогов.

    Ну на других сайтах это решается модерированием. Причем чуть ли не для каждой рубрики свой модератор. Что мешает это сделать и на инфостарте?

    Правила то описаны, но кто то же должен следить за их исполнением.

    Reply ↓
  21. venger

    (20) Модерирование решает несколько другие проблемы. Возьмем ситуацию, допустим, за три года существования ИС членами сообщества написано 100 перенумераторов. Что по вашему должен сделать модератор? Оставить одну? С какого бодуна, по каким критериям? Понятно, что совсем паршивые можно и удалить, а с остальными нормальными и хорошими, с разными вариациями и фишками, куда их модератор должен засунуть, по каким критериям и т.д. и т.п.?

    Т.е. модерация решает проблему флуда, флейма, некорректного поведения, ботов и т.д. А с объемом информации надо на другом уровне работать.

    Reply ↓
  22. Ish_2

    (21) Наверное , дело еще грустнее : как разделить совсем паршивые и не очень

    паршивые ?

    «А с объемом информации надо на другом уровне работать «.

    Это означает — найти(взрастить) искусника(ов) и беречь их .

    Reply ↓
  23. Olga_siberia

    Хорошая статья,позитивная…

    (20)а с чего ты взял что тут не кому заниматься порядком??!!Мне так кажця,что тут с модератотами порядок,ну может еще парочку подзавести….

    Reply ↓
  24. Olga_siberia

    >»А с объемом информации надо на другом уровне работать «.

    Это означает — найти(взрастить) искусника(ов) и беречь их .

    Главное ядро,а если посмотреть на ТОР 100 оно тут есть,люди которые тут живут…живут сайтом,его проблемами…

    Reply ↓
  25. luns

    Насчет модерации согласен, часто вижу кк тематические ветки уходят в никуда, что плохо ((((

    Reply ↓
  26. luns

    Например эта ))))))

    Reply ↓
  27. CheBurator

    > И что, ведь никто не предлагает ввести цензуру на весь И-нет в связи с этим. Думают, улучшают поисковики, думают над системами data mining, много чего думают.

    //

    дешевле нанять одного модератора… а не изобретать лисапеды…

    Reply ↓
  28. vip

    (21) > допустим, за три года существования ИС членами сообщества написано 100 перенумераторов

    Ощущение, что гораздо больше.

    Reply ↓
  29. Olga_siberia

    (26) куда мы катимся…

    Reply ↓
  30. venger

    (27) > дешевле нанять одного модератора… а не изобретать лисапеды…

    Специально для Че:-) См. 21-й коммент. Модератор не поможет.

    Модерирование решает несколько другие проблемы. Возьмем ситуацию, допустим, за три года существования ИС членами сообщества написано 100 перенумераторов. Что по вашему должен сделать модератор? Оставить одну? С какого бодуна, по каким критериям? Понятно, что совсем паршивые можно и удалить, а с остальными нормальными и хорошими, с разными вариациями и фишками, куда их модератор должен засунуть, по каким критериям и т.д. и т.п.?

    Т.е. модерация решает проблему флуда, флейма, некорректного поведения, ботов и т.д. А с объемом информации надо на другом уровне работать.

    Reply ↓
  31. WiseSnake

    (21) (30) Поможет еще как поможет. Модератор может заниматься еще и структурированием и «чисткой» базы. Возьмем твой пример: модератор отнесет все перенумераторы в категорию например «Перенумераторы» в разрезе платформ и упорядоченных по рейтингу. Согласись что на инфостарте нет нормального рубрикатора. Каждый пихает обработку куда ему вздумается и как ему вздумается. Должны быть правила оформления и за этими правилами кто то должен следить!

    P.S. Проблемы надо решать по мере их поступления. А главное что их НАДО решать.

    Reply ↓
  32. larisab

    Приз получен, выражаю благодарность Че!

    Reply ↓
  33. LavS

    Хоть и бегло пробежался по статье, но сама идея статьи понравилось:) Я тоже собираюсь инфостартом воспользоваться для внутреннего проекта…

    Reply ↓
  34. Styvi

    Согласен с автором статьи по поводу

    а еще и потому, что задачи все индивидуальные и очень непростые, и может быть я плохо описала, что работа была срочная и «изобретать велосипед» некогда было…

    Чем мне нравится портал, так это тем, что с ним РАБОТАТЬ можно, а не только флеймом заниматься…

    Не скажу за других, а моё имхо — на сайте черпаются в основном идеи, помогающие в работе, а не «готовые решения»…

    А касательно поднятой темы сложности поиска — не ругайте новичков, которые вместо поиска пользуются ЛЕНТОЙ ФОРУМА ЭКСТРЕННОЙ ПЕРВОЙ ПОМОЩИ — она есть ГЛАВНАЯ ПРИВЛЕКАТЕЛЬНОСТЬ, ибо первая помощь завсегда может оказаться ЕДИНСТВЕННО НЕОБХОДИМОЙ 😉

    Reply ↓
  35. tango

    (0) не обидели хоть? работы на мильон (учитывая срочность/внезапность — на два), а оценили, как всегда, в тарелку?

    имхо, как минимум — две недели на теплых островах. просто как минимум

    Reply ↓
  36. Ish_2

    (36) Я по-простому перевожу.

    Миша хотел сказать : не менее 60 тыс.руб.

    Reply ↓
  37. tango

    где-то так

    Reply ↓
  38. larisab

    (37) Примерно в 3 раза больше 🙂

    Reply ↓

Leave a Comment

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