Аналоговые часы на рабочий стол




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

40 Comments

  1. hogik

    В WinXPx64 запускается, но ничего не показывает. 🙁

    Reply
  2. Abadonna

    (1) Фиг его знает.. не имел возможности проверить 😥

    Reply
  3. Abadonna

    +(2) На Windows 7 по моей просьбе проверили — пашет, но там оно и не надо, свой виджет есть

    Reply
  4. hogik

    А в Win2000:

    Clock.exe — Unable To Locate DLL : The dynamic link library gdiplus.dll could not be found in the specified path …

    :-((((

    Reply
  5. Abadonna

    (4) http://www.dll.ru/dll/180.html

    это родная мелкософтовская

    Reply
  6. hogik

    В Win2000 запустилось.

    Очень хорошая программа для прогрева процессора… 😉

    Reply
  7. Abadonna

    (6) 😀 погнался за красотой сделал секунды непрерывными, на затраты не посмотрел. перезалил, секунды дискретные, у меня сейчас грузит проц на 2% (было больше 30…)

    Reply
  8. CheBurator

    окружность корявая, края рваный… блур какой-нибудь нужен… и не блокируется запуск нескольких копий…

    Reply
  9. Abadonna

    Края, на мой вкус, нормальные.. А блокировку щас приделаю.

    Reply
  10. CheBurator

    прямоугольный циферблат сделай — чтоб удобно было на экран положить…

    Reply
  11. Abadonna

    (10) Ну да, блин. Я столько провозился чтобы он круглый стал! 😉

    Reply
  12. Abadonna

    И вообще, это побочный эффект от

    http://infostart.ru/public/59436/index.php?fimages=yes#images

    Reply
  13. Abadonna

    (10) Качай, вредный Чебур 😀

    Второй файл — квадратные

    Reply
  14. CheBurator

    Халявщик! 😉 хочу чтобы циферблат был квадратный, а лучше — прямоуголный…

    Reply
  15. direktorSan

    Прикольно!

    Особенно если в инишнике проставить 20! 😀

    Reply
  16. hogik

    А такую форму часов можно сделать? 😉

    Reply
  17. Abadonna

    (16) Не хочу, чтобы Дали с того света за нарушение авторских прав привлек 😀

    Reply
  18. Abadonna

    ты хоть чего-нибудь выложи, потом критикуй. если не заметил — это моя программа, какое отношение она к дистрибутивам имеет? не нравится — не ешь. утомил ты меня…

    Reply
  19. larisab

    (23) А что, музыка — это идея ❗

    Библия была, почему бы и не музыка? Я за!

    Reply
  20. vasilykushnir

    (23) Вот только не надо передергивать и не путать твердое с горячим. Вот ты лично какое отношение к 1С имеешь, что здесь разорался?

    Reply
  21. lefthander

    А если нажать на кнопочку «свернуть все программы», часы тоже сворачиваются(исчезают с рабочего стола). Так у всех или только у меня?

    Reply
  22. Abadonna

    (31) Часы — обычное окно, просто родителем ему назначен Рабочий стол.

    Поэтому они ведут себя как все другие окна, т.е. и сворачиваются

    Reply
  23. lefthander

    Еще момент… если после передвижки часов по рабочему столу дважды кликнуть в трей(там где часики) — программка закрывается. 🙂 Ну и бог с ней. красиво, но в свете сворачивания — малофункционально.

    Reply
  24. Abadonna

    (33) Ну, эту проблемку, думаю, решим 😉

    Reply
  25. Tatitutu

    можно добавить , чтобы выбор был Поверх всех окон?

    Reply
  26. Abadonna

    (35) Если поверх, тогда проще их сделать как обычное окно, без родителя Рабочий стол. Тогда будет просто форма со статусом StayOnTop.

    Не думал, что они народ сильно заинтересуют, раз интересно — подработаю

    Reply
  27. lefthander

    (36) Интересно, потому как на столе «висят» крупные часы. А висты и прочая «лабуда» выше ХР на столе имеют свои часы. А тем кто на ХР и ниже — простенько и приятненько 🙂

    Reply
  28. provnick

    Хорошо, а если чуть попрозрачней? наверное память скушают?

    Reply
  29. Abadonna

    добавлены продвинутые:

    три дизайна часов, возможность «всегда поверх всех окон», запоминание стартовой позиции

    описание ini-файла внутри самого файла в секции «COMMENTS»

    Reply
  30. aleks123321

    Очень неплохая штучка

    [+]

    Reply
  31. Abadonna

    У себя приделал вдогонку грабилку температуры с америкосовского сервера в режиме реального времени. Но, блин, не дружит с проксей. 😥

    Если кому-нить надо для беспроксового применения, пишите — выложу

    Reply
  32. ledi.di@inbox.lv

    Добрый вечер.Выложите часики,пожалуйста. 🙂

    Reply
  33. Abadonna

    28.11.09 Добавлены часы с погодой. Версия 1.1.0.5

    !!! Не работают через прокси

    Описание ini — в самом ini

    Двойной клик — вывод информационного окошка

    Правый: меню

    «Обновить» — принудительное обновление с сайта

    (сохраняет файл AdvClock.HTM )

    «Погода» — открыть в установленном по умолчанию браузуре ранее «ограбленный» файл с сайта AdvClock.HTM

    Верхнее табло:

    Темп°С/Ветер м/с

    Лапочка: синяя — AM, оранжевая — PM

    Reply
  34. ledi.di@inbox.lv

    Огромное спасибо. но я живу в Латвии и хотелось бы температуру в Латвии. 😥

    Reply
  35. Abadonna

    (44) А кто ж не дает?

    Открываем http://russian.wunderground.com/global/stations/WUNKL.html

    там выбираем нужный город хоть в Латвии, хоть в Гвинея-Бисау 😉

    копируем новый адрес ссылки и записываем его

    вместо

    URL=http://russian.wunderground.com/global/stations/WUNKL.html

    URL=ЭтотНовыйАдрес в файле AdvClock.INI

    Reply
  36. Abadonna
  37. ledi.di@inbox.lv

    Я очень извиняюсь, я не настолько сильна в комп. что-бы сразу уловить что вы пишете. Не могли бы вы написать подробнее, я вам буду очень благодарна. Плюсики я и так поставила где только можно. 🙂

    Reply
  38. ledi.di@inbox.lv

    Я открыла, и что мне дальше делать??????? 😥

    Reply
  39. Abadonna

    открыть в Блокноте, найти строку

    URL=http://russian.wunderground.com/global/stations/WUNKL.html

    заменить ее на строку

    URL=http://www.wunderground.com/global/stations/26422.html

    сохранить.

    Перезапустить часы

    Reply
  40. wing

    А почему с прокси не дружит? если используются сокеты, то поддержку проксти типа «connect» — сделать легко (а теперь это самый распространенный тип прокси) … если же используются функции типа *Internet* — то они берут настройки соединения из IE.

    Reply

Leave a Comment

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