XMPP/JABBER сервер на INFOSTART.RU




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

66 Comments

  1. Altair777

    Я уже пробовал. Работает.

    Reply
  2. coder1cv8

    А у меня что-то не коннектица! (

    Хотя это наверно происки злых одминов… Дома попробую…

    А так идея супер!

    Reply
  3. MrDen

    Прикольненько, спасибо!

    Reply
  4. artbear

    Только друзья возможны как контакты ? Это не гуд 🙁

    Reply
  5. support

    (4) это поможет в продвижении сервиса «друзей», я вот сам добавил, так как потребность появилась.

    Reply
  6. Душелов

    Замечательно, но вот только бы еще сделать через 80 порт…

    Reply
  7. alexk-is

    Минус в логине тоже работает. Например, alexk-is

    Reply
  8. WiseSnake

    Славненько! Теперь и друзей можно заводить :)… Шутю..

    Может быть правда завести еще 1 список со временем… типа «Мона пообщаться»

    Reply
  9. Cifer

    Радует, что портал растет и развивается! 🙂

    Так держать!

    Reply
  10. support

    10) в этом весь и смысл, что транслируются. попробуй переподключиться.

    Reply
  11. vasilykushnir

    а меня прокся не пущает… Хотя на сайт кипа по джаберу без проблем.

    Reply
  12. CheBurator

    Саппорт, а можно выражаться точнее? в чем разница: учетная запись «support» и ваш адрес для сервера support@infostart.ru

    && для какого сервера — инфостарта и ли сервера джаббера?

    Reply
  13. CheBurator

    через миранду не удается поддконнектиться…

    кто-нить еще миранду юзает?

    Reply
  14. PeRom

    (17) Я использую, вечером(21-23 ч.) попробую.

    Reply
  15. CheBurator

    (18) ок, стукнись тогда в личку инфостартовскую

    Reply
  16. GSoft

    а добавить возможность поиска в джаббере с автоматическим занесением на сайт можно?

    Reply
  17. sound

    Делал в том же QIP Infium, подключилось, но только когда написал в поле «учетная запись» не «логин», а «логин@infostart.ru»

    Reply
  18. sound

    хм, а друзей то и нету 🙁

    Reply
  19. support

    иногда сервер отрубается, проблему решаем

    Reply
  20. anbxp

    Через миранду сегодня подключился. Все ок

    Reply
  21. smirnov.a

    а конференции будут?

    Reply
  22. support

    (25) а это как?

    Reply
  23. Душелов

    (26) Грубо говоря — это чат.

    Reply
  24. Anatolka

    не получается авторизироваться =(

    Reply
  25. support

    (25) а для каких целей конференция? Что в ней обсуждать?

    Reply
  26. smirnov.a

    (29) Для того что бы получать квалифицированную помощь по 1с, знакомится, общаться, флудить и т.д. Организовать что то вроде интерактивного мистовского форума…

    Reply
  27. Altair777

    (30) > Организовать что то вроде интерактивного мистовского форума…

    Скажу по секрету ;-), форум здесь тоже есть

    Reply
  28. smirnov.a

    (31) Скажу по секрету 😉 В фразе «интерактивный форум», главное слово «интерактивный» =)

    Reply
  29. GSoft

    (31,32) да вы сплетники оказываИтЦа))))

    Reply
  30. CheBurator

    делать вам видать нечего на работе…

    Reply
  31. Abadonna

    (34) Согласен! 😉

    Reply
  32. Killoe

    Чвот не коннектица. Не проходит авторизацию, хотя все по инструкции сделал.

    Reply
  33. support

    (36) немного подглючивало, сейчас настроили, сервер должен быть доступен всегда, даже независимо от сайта.

    Reply
  34. Altair777

    (35)

    > Abadonna 08.06.2009 05:08:23

    > (34) Согласен! 😉

    Жалко, «Люди» недоступны, а то бы посмотрели у кого больше всех сообщений на форуме 🙂

    Я, в лучшем случае, только в 10-ку вхожу.

    У меня — 688, у Abadonna — 1465 (без учета закрытых для меня веток)

    Reply
  35. Abadonna

    (38) А на время посмотреть религия не позволяет? Когда время в районе от 14 Москвы, это я дома уже,однако. Росиия чуток поболее Украины, только в Красноярском крае Украин аж 4 штуки помещается, а был я президентом, и еще одна бы помещалась, а уж Крым точно бы! :)))))))))

    Reply
  36. Abadonna

    +39. И сейчас, кстати, ЕЩЕ ДОМА 😉

    Reply
  37. Altair777

    (39) А время причем? Типа это юмор был? Я тоже смайлики поставил. 🙂

    И, кстати, ты отвечал на (34), который был без смайлика.

    И еще по поводу времени… Вот только что написал коммент

    http://infostart.ru/projects/4353/?p=3#comm41

    Reply
  38. GROOVY

    Даешь чаткомнаты! Ну или хотябы одну…

    Reply
  39. PeRom

    (17-19) В миранде при подключении к серверу зависала напрочь. Вырубил через панель задач, запускаю ещё раз миранду — всё отлично и друзья в списке контактов и соединение есть…

    пс. после всех испытаний времени не было описать(да и желания) — отпуск.

    Reply
  40. Anything

    И у мне удалсь подключиться только после ввода логина в виде «логин@infostart.ru». Спасибо (21).

    Без этого так бы и не смог подключиться.

    Reply
  41. Serj1C

    Подключился, логин без @infostart.ru

    Только общаться не с кем, все друзья оффлайн…

    Reply
  42. PeRom

    В описании есть прога Pidgin, а у неё в типах учзаписи Джабера нету 😥 , я уже и расстроился. Но там есть XMPP 🙂 . Вот решил поделиться радостью.

    пс. Осваиваю убунту — много чего интересного нашёл 🙂

    Reply
  43. d0dger

    (46) Jabber = XMPP

    Надо еще бота, который будет извещать о новых сообщениях

    Reply
  44. vcv

    А у меня почему-то я сам себе в «друзьях» в списке контактов в миранде получился. Понятно, что сам себе не враг, а скорее друг, но все равно прикольно — сам себя авторизировал, с собой пообщался…

    Reply
  45. support

    Вообще, сообщения приходят от любого пользователя, просто в списке контактов только друзья.

    Reply
  46. vcv

    Не хватает только одного ИМХО — что бы уведомления различные приходили не на почту, а в джаббер. Будет просто песня.

    Reply
  47. Valerich

    странно, а я в инфинуме подключился со своим логином «Валерыч». И сразу дрдузья появились в списке. и сообщения уходят 😀

    Вопрос. Что я делаю не так? не должно же вроде по инструкции ❓

    Просто я как обычно до конца инструкцию дочитал уже после того как сделал 🙂

    Reply
  48. anig99

    (42) я уже полгода через pidgin на инфостарт… (: А на убунте уже два года…

    даже 1с без бубнов запустил.

    Reply
  49. Altair777

    (51) Уходят-то они уходят. А приходят по джабберу?

    Reply
  50. Valerich

    (53) от саппорта пришло «тест». Я ответил. Реакцию не вижу.

    Вот вопрос в том, мои то доходят до кого-нибудь?

    Reply
  51. Valerich

    ладно, переименовался. у меня везде ник сменится?

    Reply
  52. Valerich

    сменился 🙁 теперь люди на улицах узнавать перестанут 😥

    Reply
  53. Altair777

    (54)-(56)

    Можно изменить последний свой коммент, а не писать 3 подряд

    Reply
  54. Valerich

    (57) а как?

    от блин слепой — не видел. Спасибо за подсказки.

    Reply
  55. djam_arttek

    Чего-то не работает…

    Reply
  56. support

    (59) Это как светофор — работает, не работает, работает, не работает… 🙂

    Reply
  57. djam_arttek

    С наступающим. Странный какой-то сервер. Что-то не припомню что бы такое было на jabber.ru к примеру

    Reply
  58. support

    (61) В чем его странность?

    Reply
  59. nitroimx

    Реально, сделайте чат-комнаты, без этого это просто сервер jabber которых итак полно. Но начинание хорошее 🙂

    Reply
  60. B2B

    Поддерживаю создание чат-комнат!

    Reply
  61. Kettle

    Почему-то не работают чат-комнаты… Создал, но отправить туда ничего не получается…

    <message to=»1c@infostart.ru» type=»groupchat»>
    <body>тест</body>
    </message>
    ­
    <message to=»kettle@infostart.ru/QIP» type=»error» from=»1c@infostart.ru»>
    <error type=»cancel»>
    <item-not-found xmlns=»urn:ietf:params:xml:ns:xmpp-stanzas» />
    </error>
    </message>
    

    Показать

    Reply
  62. Kettle

    Вот в данный момент наблюдаю в логе, что народ-то пошёл… Но вот написать никто ничего не может… Обидно, однако… %(

    Reply
  63. DitriX

    что то не работает 🙁

    Reply
  64. migele

    А оно еще живо?

    Reply
  65. support

    (68) migele, если кому надо, то можно реанимировать.

    Reply
  66. ksv74

    Поиграться то можно

    Reply

Leave a Comment

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