# FLUIdS
Организация конфигурационных файлов

- Общий формат конфигурационного файла
- Комментарии
- Сообщения об ошибках

| Общий формат файла |

Конфигурационные файлы в системе FLUIdS имеют жестко заданный формат, напоминающий тот, который используется в среде MS Windows. Он состоит из набора директив, разделенных на группы по смысловому или функциональному признаку. Каждая директива имеет вид

  `имя = значение`

где имя - имя директивы, которое не чуствительно к регистру букв, а значение - это символьная строка, имеющая определенную смысловую нагрузку. Присутствие знака равенства `=` в написании директивы обязательно, а количество пробелов между ним и именем директивы или значением не существенно.

Определяемое в директиве значение может состоять из нескольких элементов. Разделителями элементов служат пробелы. Элементы строки могут браться в двойные кавычки, например:

  `Replace = ending .koi8-r ""`

В этой директиве в качестве значения задано два элемента - это стока `.koi8-r` и пустая строка. В подобных директивах двойная кавычка рассматривается как специальный символ, начинающий и заканчивающий элемент строки. Если указана начинающая двойная кавычка, а заканчивающая отсутствует, то директива считается некорректной, и при обработке конфигурационного файла будет выдано соответствующее сообщение.

Использование двойных кавычек бывает необходимо, когда Вы хотите задать в директиве пустую строку или когда элемент строки содержит пробел:

  `Replace = string " " %20`

Если есть необходимость указания внутри элемента строки самого символа `"`, то его нужно заэкранировать, т.е. предварить символом `\` (обратная косая черта):

  `Replace = string \" %22`

Впрочем, `\` может экранировать любые символы, в том числе и пробелы. Сам символ `\` при написании в директиве также необходимо экранировать (если он, конечно, не используется как экранирующий):

  `IgnoreDirName = c:\\my\ docs`

Этой директивой программе flindex дается указание не индексировать документы в директории 'c:\my docs'.

Необходимость экранирования самого символа `\` (обратный слэш) представляет собой некоторое неудобство, в особенности для пользователей операционных систем MSDOS, MS Windows 95/98/NT и OS/2, так как при указании имен файлов и директорий этот символ приходится "удваивать":

  `IgnoreDirName = e:\\www\\myhost\\docs`

Вина за это неудобство целиком лежит на корпорации Microsoft, которая несколько десятилетий назад весьма опрометчиво выбрала в качестве символа разделителя имен директорий обратный слэш, а не прямой. К тому моменту в мире уже существовал целый ряд операционных сред, в которых повсеместно подобным символом служил прямой слэш, а обратный использовался исключительно в целях экранирования. Microsoft же совместила эти функции в символе `\`, использовав прямой слэш для задания опций при вызове программ. Результаты того решения мы вынуждены ощущать до сих пор...

Как уже указывалось, директивы делятся на группы, образуя так называемые конфигурационные разделы. Каждый раздел начинается со строчки:

  `[имя]`

где имя - это название раздела. Другими словами, строчка, начинающаяся с открывающей квадратной скобки и содержащая соответствующую закрывающую скобку, образует начало раздела. Поэтому общий формат раздела в конфигурационном файле выглядит так:

      [ИмяРаздела]
      Директива1 = Значение1
      Директива2 = Значение2
        . . .
      ДирективаN = ЗначениеN

Порядок следования разделов в конфигурационном файле не имеет значения. Кроме того, некоторые разделы (например, Replace или Index в конфигурационном файле CGI модуля) можно повторять, передавая в них разную информацию.

Для каждого отдельно взятого раздела определен свой, уникальный набор директив. В общем случае порядок расположения директив в разделе не имеет значения, но из этого правила бывают важные исключения, которые специально оговариваются.

Каждую директиву в разделе можно повторять, задавая для нее разные значения. Реакция системы на это будет зависеть от определения директивы. Если для нее предусмотрен ряд значений, то они будут собраны в специальную коллекцию, если же только одно значение, то в результате будет использовано то, которое задано самым последним.

Совсем не обязательно в конфигурационном разделе выписывать все определяемые для него директивы, более того, раздел может быть даже пустым, т.е. заявленным в конфигурационном файле, но без директив. Такие разделы игнорируются системой. Сами разделы могут отсутствовать в конфигурационном файле, если в них нет необходимости.

Замечание: если в самом начале конфигурационного файла присутствуют директивы без объявления раздела, то они игнорируются.

| Комментарии |

Пустые строчки в конфигурационном файле игнорируются системой. Если строчка начинается с символа `#` (решетка), то она считается комментарием и тоже игнорируется.

Более того, если конфигурационный раздел объявлен неполностью, т.е. в строчке с его именем отсутствует закрывающая квадратная скобка:

  `[ИмяРаздела`

то он целиком, вместе со всеми своими директивами, будет рассматриваться как комментарий.

Вернее сказать, что любая строчка конфигурационного файла, расположенная ниже подобной строчки и не являющаяся объявлением конфигурационного раздела, будет проигнорирована системой.

То есть, вставив в нужном месте строчку, состоящую из одного символа `[`, можно перевести в комментарий все ниже расположенные директивы. Это правило, впрочем, действует только до объявления последующего конфигурационного раздела. Например:

       . . .

      [defaults]
       . . .
      replace = beginning  "/www/docs/"  "http://www.your-host.ru/"
      [
      replace = ending  .koi8-r  ""
      replace = ending  index.html  ""

      [job]
      charset = koi  *.koi8-r

       . . .

Здесь директивы Replace = ending ... будут проигнорированы.

| Сообщения об ошибках |

При обработке конфигурационного файла система FLUIdS может выдать сообщение об ошибке, сигнализирующее о том, что в нем нарушены одно или несколько вышеописанных правил.

Таких сообщений всего три:

"Ошибка открытия конфигурационного файла YYY: системное сообщение"
  Данная ошибка появляется, когда система не смогла прочесть конфигурационный файл. Причина этому описывается системным сообщением. Наиболее частые причины возникновения ошибки - отсутствие самого конфигурационного файла или же отсутствие прав доступа к нему.

"Неопознанный раздел с именем XXX в конфигурационном файле YYY."
  говорит о том, что при описании конфигурационного раздела указано неизвестное системе имя (этого раздела). Для каждого типа конфигурационного файла определен свой набор разделов, который может быть в нем использован. Разделы с неизвестными именами игнорируются системой.

"Неверный формат строки (номер NNN) в конфигурационном файле YYY."
  говорит о том, что FLUIdS не смогла корректно обработать директиву конфигурационного файла, располагающуюся на строчке номер NNN. Тому может быть несколько причин:
  - указана директива с неизвестным системе именем (обычно это следствие опечаток);
  - указаная директива определена для другого конфигурационного раздела, а не для текущего (в таком случае ее надо переместить в подходящий для нее конфигурационный раздел);
  - в строчке вообще отсутствует имя директивы (т.е. строчка сразу начинается с знака `=`);
  - в строчке отсутствует сам знак `=`, разделяющий имя директивы и ее значение;
  - справа от знака равенства отсутствует значение для используемой директивы;
  - директива требует указания двух элементов в поле значения, а указан только один (такое требование предъявляется, например, к директивам конфигурационного раздела Replace);
  - элемент значения начинается с двойной кавычки, а закрывающая его двойная кавычка отсутствует;
  - в качестве имени директивы используется неизвестное системе имя кодировки.

Директива, вызвавшая сообщение об ошибке, будет также проигнорирована системой.

На предыдущую страницу | valera@sbnet.ru