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




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

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 не будет опубликован. Обязательные поля помечены *