antonio's blog

antonio's blog


Блог о всяком разном, связанном с разработкой ПО. Пишу редко, когда есть время и желание.

Anton Dobkin
Author

Share


Tags


Использование расширения php-avdesk для интеграции с Dr.Web AV-Desk

Anton DobkinAnton Dobkin

В конце прошлого года мы выпустили набор библиотек для интеграции приложений и сервисов партнеров с интернет-сервисом Dr.Web AV-Desk.

Использование библиотек упрощает и ускоряет процедуру интеграции сторонних продуктов — биллинговых систем и личных кабинетов провайдеров, а также других приложений партнеров компании «Доктор Веб» с сервером Dr.Web AV-Desk 6.x.

Среди выпущенных библиотек есть расширение для PHP - php-avdesk.
php-avdesk - это обертка над библиотекой libdwavapi, позволяющая взаимодействовать с сервером Dr.Web AV-Desk из php скриптов. Расширение совместимо с PHP 5.3, PHP 5.4 и PHP 5.5 beta1

Код данного расширения был опубликован в этом году на GitHub

Установка раширения

Перед сборкой расширения нам необходимо установить пакеты-зависимости:

Далее клонируем репозиторий с GitHub:

git clone https://github.com/DoctorWebLtd/php-avdesk.git  

На данный момент в репозитории существует две ветки:

Нас интересует ветка 1.0.x:

git branch 1.0.x origin/1.0.x  
git checkout 1.0.x  

Переходим в репозиторий и выполняем сборку расширения:

cd php-avdesk  
 phpize
 ./configure
 make
 make install

Если сборка прошла успешно, то в папке php расширений должен появиться файл dwavd.so

Для проверки выполните команду:

ls -al $(php-config --extension-dir)  

Теперь необходимо подключить расширение. Это может быть сделано разными способами, зависит от используемой операционной системы (дистрибутива):

Теперь необходимо убедиться, что php "видит" наше расширение, выполните:

php -ri dwavd  

Если расширение работает корректно, то вы увидите информацию о нем

Глобальные параметры

Для модуля можно задать глобальные параметры подключения к серверу Dr.Web AV-Desk. Эти параметры будут использоваться по умолчанию, если параметры не будут заданы явно.

ПараметрПо умолчаниюОбласть действияОписание
avdesk.hostlocalhostPHP_INI_ALLАдрес сервера. Если указан протокол https://, то будет использовано защищенное HTTPS соединение. По умолчанию используется протокол HTTP
avdesk.port 9080PHP_INI_ALLПорт адреса
avdesk.loginadminPHP_INI_ALLИмя пользователя используемое для подключения
avdesk.passwordrootPHP_INI_ALLароль используемый для подключения
avdesk.crtnonePHP_INI_ALLСертификат

Работа с расширением

Инициализация дескриптора подключения

Работа с расширением начинается с инициализации дескриптора подключения к серверу. Инициализация выполняется с помощью функции dwavd_init():

mixed dwavd_init(   [string $host = ini_get("avdesk.host")],  
                    [string $port = ini_get("avdesk.port")], 
                    [string $login = ini_get("login")], 
                    [string $pwd = ini_get("avdesk.password")]
                 );

Функция принимает 4 необязательных аргумента:

Функция возвращает дескриптор подключения к серверу в случае успешного выполнения, иначе NULL.

Задать или изменить параметры подключения к серверу можно после инициализации дескриптора. Используйте следующие функции:

Освобождение памяти выделенной под дескриптор

После того, как дескриптор становится более не нужным, выделенную под него память необходимо освободить. Освобождение памяти выполняется с помощью функции: dwavd_free():

bool dwavd_free(resource $avdesk_res);  

Обработка ошибок

Ошибки, возникающие при работе с расширением php-avdesk, делятся на два типа: - ошибки расширения - такие ошибки возникают до отправки каких-либо данных на сервер, например, в функцию передан не корректное значение или не удалось подключится к серверу - ошибки сервера - ошибки которые вернул сервер, например, при создании станции был указан ID, который уже используется. Такие ошибки возникают при работе с функциями:

Для получения информации о возникшей ошибки необходимо вызвать функцию dwavd_error():

int dwavd_error(resource $avdesk_res, string &$error, int &$errcode);  

Функция возвращает 1, если ошибку вернул сервер, иначе 0. Первым параметром функция принимает дескриптор подключения. Вторым и третьим параметром функция принимает по ссылке переменные - $error и $errno - в которые будет записан текст и код ошибки

<?php  
// Инициализируем дескриптор подключения
$avdesk = dwavd_init('avdesk.example.com', 9080, 'admin', '123qwerty');
if (!$avdesk) {  
    $errno = 0;
    $error = null;
    dwavd_error($avdesk, $error, $errno);
    die('Не удалось создать дескриптор подключения: ' . $error);
}
echo 'Дескриптор создан успешно';

// Работаем с сервером

// Освобождаем память
dwavd_free($avdesk);

// Инициализируем дескриптор с параметрами подключения заданными по умолчанию 
$avdesk = dwavd_init();
if (!$avdesk) {  
    $errno = 0;
    $error = null;
    dwavd_error($avdesk, $error, $errno);
    die('Не удалось создать дескриптор подключения: ' . $error);
}
echo 'Дескриптор создан успешно';

//Работаем с сервером

// Освобождаем память
dwavd_free($avdesk);  
?>

Примеры

Вывод ТОП-10 вирусов

Ниже приведен пример получения статистики с сервера и вывода на страницу ТОП-10 вирусов

<?php

// Инициализируем дескриптор подключения
$avdesk = dwavd_init('192.168.10.3','9080', 'admin', '1234567890');

if(!$avdesk) {  
    $errno = 0;
    $error = NULL;
    dwavd_error($avdesk, $error, $errno);
    die('Не удалось создать дескриптор подключения: ' . $error);
}

// Запрашиваем статистику сервера
$stats = dwavd_srv_get_stats($avdesk, NULL, NULL, 10);

if (!$stats) {  
    $errno = 0;
    $error = NULL;
    $flag = dwavd_error($avdesk, $error, $errno);
    if($flag) {
    die('Не удалось получить статистику сервера. Сервер вернул ошибку: ' . $error. ' (code: '.$errno.')');
    } else {
    die('Не удалось получить статистику сервера: ' . $error);
    }
}

$viruses = dwavd_srv_stats($stats, 'viruses');

echo '<table cellpadding="5"><tr><th>Вирус</th><th>Кол-во инфицированных объектов</th></tr>';

// Перебор вирусов
do {  
    $virus = dwavd_list_current($viruses);
    echo '<tr><td>'.dwavd_virus($virus, 'name').'</td><td>'.dwavd_virus($virus, 'objects_count').'</td></tr>';
    //var_dump($virus);
} while(dwavd_list_next($viruses));
echo '</table>';

// Освобождаем память
dwavd_srv_stats_free($stats);  
dwavd_free($avdesk);  

Создание новой подписки

Ниже приведен пример создания новой подписки (станции) статистики

<?php  
// Инициализируем дескриптор подключения
$avdesk = dwavd_init('192.168.10.3','9080', 'admin', '1234567890');

if(!$avdesk) {  
    $errno = 0;
    $error = NULL;
    dwavd_error($avdesk, $error, $errno);
    die('Не удалось создать дескриптор подключения: ' . $error);
}

// Initializing resource of a new station
$st = dwavd_st_init(); 
dwavd_st_set_array($st,  
   array (
     'parent_id'=>'c060a9c0-8f75-4a8c-b2da-044aa0eb98b7',
     'tariff_id'=> DWAVD_TARIFF_ID_PREMIUM,
   ) 
);

$id = dwavd_st_add($avdesk, $st);

if (!$id) {  
    $errno = 0;
    $error = NULL;
    $flag = dwavd_error($avdesk, $error, $errno);
    if($flag) {
    die('Не удалось создать подписку. Сервер вернул ошибку: ' . $error. ' (code: '.$errno.')');
    } else {
    die('Не удалось создать подписку: ' . $error);
    }
}

// Освобождаем память
dwavd_srv_stats_free($st);  
dwavd_free($avdesk);  
?>
Anton Dobkin
Author

Anton Dobkin

Comments