Теория ошибок




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

41 Comments

  1. ZZZ

    Сhe Burashka, зачем ты это вывесил, ведь автор явно далёк от прогерства….

    Reply
  2. tdr1225

    Дело не в прогерстве. Это закон Мерфи (следствия). Я это читал лет 20 назад. (-)

    Reply
  3. CheBurator

    во-во, причем даже больше, я тогда еще учился на мэйнфремы…

    Reply
  4. Lesovik

    черт, лет 20 назад я читал только букварь:( посему минусовать не буду))

    Reply
  5. vovan519

    И на шутку не тянет и от правды далеко.

    Reply
  6. Shaman100M

    Наука о фракталах указывает на ошибки в данной теории, которые ей же и следуют. 😉

    Reply
  7. akm

    а мне понравилось — от дел отвлекает

    Reply
  8. CheBurator

    Всем кто минусанул — вы все бяки! все изложенное суть правда жизни, особенно при программировании на ассемблере на манфреймах…

    Reply
  9. Поручик

    Истинная правда, о чём свидетельствует хотя бы мой многолетний опыт и изделия made in 1C.

    Минусанувшим — взяться за шиворот, убиться апстенку.

    Reply
  10. O-Planet

    Белан… тьфу! Банан… Короче, БАЯН!

    Reply
  11. Abadonna

    (10) Как я понял, вы с Чебуром уж на всякой хрене готовы рейтинг набирать (показал язык) :))))))))))))

    Reply
  12. CheBurator

    Как сказал император Веспасиан своему сыну: «Деньги — не пахнут!» 😉

    Reply
  13. kitt

    плюс за «Если вы с пеpвого pаза сумели написать пpогpамму, в котоpой тpанслятоp не обнаpужил ни одной ошибки, сообщите об этом системному пpогpаммисту. Он испpавит ошибки в тpанслятоpе.» =)

    Reply
  14. Abadonna

    (13) Знаешь за что Каин Авеля убил? Тот ему анекдоты в бородой постоянно рассказывал. Достал…

    Шутке лет эдак…. много

    Reply
  15. O-Planet

    (11) Не прав ты! Покажи из моего, выложенного здесь за последний год, хрень. Разве что распечатка реквизитов документов, но это я Мастеру подражал, не удержался 😉

    Reply
  16. Abadonna

    Хрень? Плизззззз…. твоё эссе про бедных замученных сисадминов 😉

    Reply
  17. O-Planet

    (16) Это хрень? 🙁 Ну, пусть support снесет тогдась ее. Вообще-то народ там отписался, что одобряет. Нупы они, наверное…

    Reply
  18. Abadonna

    (17) могу только привести цитату из тебя же 😉 :

    «Белан… тьфу! Банан… Короче, БАЯН!»

    Reply
  19. coder1cv8

    По-моему, у товарища Че творческий кризис, вот и постит всякую фигню! ))

    (11) +100

    Reply
  20. coder1cv8

    (ОФФ)

    По мне, так рейтинги надо разделить на:

    — «Благодарности» за программы, методические материалы, помощь на форуме — это рейтинг участника у него в профиле;

    — и «Up-ы» — это рейтинг ветки, статьи, юмора, чего угодно — ни какому конкретному автору не принадлежащий, а служащий исключительно для поддержания «на плаву» интересных людям статей/программ.

    Но кто ж меня послушает… )

    Reply
  21. CheBurator

    (19) у ТОВАРИЩА че НА НОСУ ЗАПУСК МЕГАСКЛАДА

    (20) ZCTY GTYM — [HTYM DCZRFZ $-)

    Reply
  22. vip

    (21) Товаришь Че перетрудился…

    Reply
  23. Abadonna

    (21) ZCTY GTYM — [HTYM DCZRFZ $-)

    Вот когда пригодилась моя прога для транслитерации :)))

    Перевод:

    ЯСЕН ПЕНЬ ! хРЕНЬ ВСЯКАЯ ;!)

    Reply
  24. O-Planet

    (18) В Интернете 90% всего — баян. Мож потому, что Интернет — это развлекуха для многих, и не более. Мне нет нужды что-то говорить про «Админа», статья по популярности должна быть на Инфостарте одной из первых, и это уже мнение общественности, потому что, если кто-то заметил, в статье нет и намека на плюсование рейтинга 😉 Я пишу то, что меня хоть сколько задевает, потому что … хочу. Если я захочу попиариться, напишу статью на тему, какой хороший пакет КЗК 😉 Всегда пишу сам. Если кому баян — ну, не читайте. Правда, мне еще в школе говорили, что мои сочинения можно ругать, но не заметить их — нельзя. И потому мои работы неоднократно читали на школьной линейке, классных часах, как пример. Это еще была советская школа. (Да, хвалюсь и горжусь, хоть! И прикалываюсь…)

    Reply
  25. CheBurator

    > И потому мои работы неоднократно читали на школьной линейке, классных часах, как пример.

    У писсуара — не льсти себе, подойди ближе!!!

    Упомянутую выше фразу следует читать

    > И потому мои работы неоднократно читали на школьной линейке, классных часах в наказание остальным…

    Reply
  26. O-Planet

    Нет, Чебурашка, я сам не понимаю, и не помню, кстати, что я там писал, но даже наши местные бандиты любили, когда мои работы читали. Просто в этот момент не спрашивали никого, это — раз. Потом, за лучшее сочинение в награду автору разрешалось по произведению вести заключительный урок. И это — тоже было здорово для всех, потому что я все 45 минут предпочитал говорить сам. Ну а потом, все-таки, оно было чем-то интересно. Всегда умел держать внимание аудитории. Это — врожденное 🙂

    Reply
  27. CheBurator

    ну, это и у мну было.. проходили… лет до 35 я мог трындеть на любую тему в течение любого времени с впечатляющим эффектом на большинстов народа.. если постараться — тои сейчас могу затрындеть насмерть неподготовленных слушателей… просто вся проблема в том, что пока мы с тобой трындели, другие — занимались обменом жвачкой, сшибали по 2 коп у иностранцев и т.д…. ну а про итоговый результат (текущее) 0- я умалчиваю… 😉

    Reply
  28. O-Planet

    >> пока мы с тобой трындели, другие — занимались обменом жвачкой, сшибали по 2 коп у иностранцев и т.д….

    Этого я не понял что-то. Я ни сколько не жалею, что не обменивал жвачку и джинсы, а был тем, кем был. (Хотя, записи иностранные продавал.) Просто где сейчас все те, кто стеснялся быть лучшим в чем-то? Я не узнаю своих одноклассников. Мож, кто-то материально и лучше меня живет, но они выглядят старше, у них куча болезней, кто-то спился, парочку отстрелили, у многих не сложилось в личном плане. Я не говорю о разных комплексах, внутренних страхах, вечном напряге и разочарованности во всем… Не, оно того не стоит.

    Да ты глянь на себя, кстати! Ты — лучший на Инфостарте, спортсмен, приколист. Про многих в 28-30 уже можно сказать, что он — старик по жизни. Думаю, про нас такого не скажут и в 70. так что, даж не думай брюзжать, что оно все хрень…

    Reply
  29. CheBurator

    😉 Тут главное — понять все…

    Reply
  30. vip

    (24) > Если я захочу попиариться, напишу статью на тему, какой хороший пакет КЗК

    Ты лучше про Голден Кей напиши, а то как-то давно не слышно.

    В отработанном стиле:

    «Когда настало время ввести в Кассирочку мой Голден Кей…» и т.д.

    Reply
  31. Abadonna

    >»Когда настало время ввести в Кассирочку мой Голден Кей…»

    Блин, у меня народ, а я под стол лезу :)))))))))))))))))))))))

    Ероха, предупреждай!

    Reply
  32. O-Planet

    Нефритовый он, а не гольден 🙂 В отличие от вас, флудеров, я работу одну заканчиваю, поэтому и не слышно. А вот закончу и введу, ну, или наоборот…

    Reply
  33. Abadonna

    (32)>я работу одну заканчиваю, поэтому и не слышно.

    Ой, мамочка, что ж будет, когда станет СЛЫШНО?????????????? 🙂

    Reply
  34. vip

    (32) Поскорей заканчивай одну работу и…

    «Торжественный, под зычный гром панфар

    В Кассирочку он вводит…»

    (с) Д. Мильтон. Потерянный рай

    Reply
  35. Abadonna

    (34). Не так!

    Под сенью свежих, чистых струй

    В нее он вводит Голден….

    :)))))

    Reply
  36. vip

    (35) :)))))))))))))

    Старый пошляк. 🙂

    Reply
  37. Abadonna

    (36 )Во-первых, не старый, а во-вторых — по… эт

    Reply
  38. JohnyDeath

    (35) ржунимагу! ))))

    Reply
  39. O-Planet

    (34) Чо будет? Введу, а потом сервак подвешу 🙂

    Reply
  40. vip

    (39) Тяжеловато. Можешь утерять тестикулы.

    Reply
  41. AmoreMe

    Ошибка, сколько в этом звуке для сердца русского слилось,

    А сколько в нем отозвалось? Когда бежишь спустивши брюки,

    За той, чей образ со спины тебе внушает сладость муки….

    И развернув, её лицом… В мозгу твоём раздался гром. Ошибка!

    Счастье не сбылось!

    Всё остальное можно считать лишь временными трудностями!

    Reply

Leave a Comment

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