Новая задача, связанная с 1С. Дано: сервер 1С, на нём есть несколько конфигураций 1С, опубликованных как веб-приложения. Для входа в конфигурацию нужно проходить по ссылкам вида:
http://192.168.1.2/config
где config — это имя конфигурации, под которым она опубликована.
Как я уже упоминал выше, конфигураций несколько, а некоторые пользователи пользуются сразу двумя, а то и тремя, и выбирать конфигурации, ковыряясь в закладках браузеров не всегда удобно.
Изучив содержимое конфигурационных файлов веб-сервера (в моём случае это сервер apache2) и каталога с данными (опять же в моём случае /var/www). Настройки каждой конфигурации 1С располагались по своим каталогам и названия каталогов совпадали с путём указанным в url. Адресу http://192.168.1.2/config соответствовал путь /var/www/config. Я пришёл к выводу, что можно легко организовать выбор конфигурации путём написания одного небольшого скрипта, который необходимо поместить в каталог с данными, настроенным по умолчанию создателями моего дистрибутива Linux (/var/www/html). Скрипт, по моей задумке, должен перебирать каталоги и искать в них файл настроек, опубликованного веб-приложения (default.vrd). При обнаружении настроек он добавит ссылку на конфигурацию в список, который будет показан пользователю. Писать решил на php, так как на сервере для этого было всё предустановлено заранее.
Далее, открыв файл настроек (default.vrd) от одной из конфигураций, который оказался в формате xml, я пришёл к выводу, что можно добавить ещё и небольшое описание каждой конфигурации для удобства пользователей. Поскольку в формате xml можно использовать комментарий, я решил его добавить в файл последней строкой (<!-- текст -->) и вписать в него название конфигурации. Если файл настроек не будет содержать последней строкой комментарий, то пользователю будет показано имя каталога с конфигурацией.
Итак, задача ясна, пути решения определены. Можно приступать к написанию кода. Через некоторое время был готов следующий скрипт:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>1С конфигурации на сервере</title>
<link rel="shortcut icon" href="/favicon.ico">
<style>
<!-- поле для творчества -->
<style>
</head>
<body>
<div class="container">
<h1>1С:Предприятие 8.3</h1>
<ul class="list">
<?php
function getTitle($file)
{
$fileContent=file($file);
$lastLine = end($fileContent);
preg_match('/<!--(.*)-->/', $lastLine, $matches);
if (isset($matches[1])){
return trim($matches[1]);
}
return false;
}
Функция getTitle($file) отвечает за получения из файла настроек описания конфигурации, которое будет показано пользователю. Если последняя строка файла не содержит комментария, то функция возвратит логическое false, если комментарий присутствует, то из него будет выделена подстрока описания и возвращена, как результат.
$baseDir = '/var/www';
$dirList = scandir($baseDir);
Определяем переменную $baseDir — это корневой каталог веб сервера. Так же сразу сканируем корневой каталог, получив тем самым в массив $dirList с подкаталогами, в которых мы будем искать файлы, содержащие настройки публикуемых конфигураций (файлы default.vrd).
foreach ($dirList as $value) {
if ($value === '.' || $value === '..') {
continue;
}
$vrdFile = $baseDir.DIRECTORY_SEPARATOR.$value.DIRECTORY_SEPARATOR.'default.vrd';
if (file_exists($vrdFile)) {
$title = getTitle($vrdFile);
if (!$title) {
$title = $value;
}
echo '<li><a href="/'.$value.'" target="_blank">База:'.$title.'</a></li>'.PHP_EOL;
}
}
?>
</ul>
</div>
</body>
</html>
Проходим по списку подкаталогов из массива $dirList. Если встречаем каталоги «.» или «..», то пропускаем их, а в остальных ищем файл настроек публикации. При обнаружении файла default.vrd ищем в нём комментарий, используя определённую выше функцию getTitle, формируем ссылку (url) для входа в конфигурацию 1С и добавляем html элемент списка.
Вот таким нехитрым способом пользователи получили удобный выбор, а я уменьшил себе головную боль, так как запомнить один ip адрес проще, чем целиком ссылку, да и в любой момент конфигураций может стать больше.
Стилизацию элементов html приводить не буду, оставлю вам поле для творчества, а то, что вышло у меня, будет в заголовке этой статьи.
Надеюсь, что мой опыт кому-то пригодится. Спасибо, что прочитали до конца.