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




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

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