Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||||||||||||||||||||
www.lissyara.su
—> документация
—> EXIM
|
|
Расширение
“.eml
” - дружелюбная подсказка вирусным сканерам, что они могут ожидать внутри файла структуру подобную MBOX. Файл создаётся при первом вызове средства контентного сканирования. Последующие вызовы условий контентного сканирования снова открывают тот же самый файл. Директория рекурсивно удаляется когда ACL
“acl_smtp_data
” завершает работу, если не установлена опция:
|
Когда ACL MIME декодирует файлы, они, по умолчанию, кладутся в тот же самый каталог.
41.1 Сканирование на вирусы
Условие ACL
“malware
” позволяет вам подключить программу вирусного сканера к exim'y. Оно поддерживает
“общий
” (
“generic
”) интерфейс к сканерам, вызываемым через шелл, и специализированные интерфейсы для вирусных сканеров типа
“daemon
”, которые постоянно находятся в памяти и, поэтому, значительно быстрее.
“
Вы можете установить опцию av_scanner
” в первой части конфигурационного файла exim, для задания используемого сканера, вместе с любыми необходимыми дополнительными опциями. Базовый синтаксис - следующий:
|
Если вы не установите
“av_scanner
”, по дефолту она будет:
|
Если значение
“av_scanner
” начинается с символа доллара, оно раскрывается до использования. В этом релизе поддерживаются следующие типы сканеров:
“aveserver
” - Это даемон сканера Касперского, 5-й версии. Вы можете получить триальную версию по адресу http://www.kaspersky.com. Этот тип сканера обладает одной опцией, которая является путём к UNIX-сокету даемона. Значение по умолчанию показано в этом примере:
|
“clamd
” - Этот сканер типа даемона, выпускается по лицензии GPL и явялется свободным софтом. Вы можете получить его по следующему адресу http://www.clamav.net. Некоторые старые версии clamd не просматривали запакованные контейнеры MIME, таким образом, для использовавших его было рекомендовано распаковывать вложения MIME в ACL MIME. Больше нет такой необходимости. Требуется одна опция: или путь с именем файла UNIX-сокета, или имя хоста (или его IP-адрес), и портом, отделённым пробелом, как во втором из этих примеров:
|
“cmdline
” - Это ключевое слово - общий интерфейс командной строки сканера. Она может использоваться для для добавления вирусного сканера, который вызывается из шелла. Этот тип сканера принимает три обязательных опции:
1. Полное имя и путь к бинарному файлу сканера, со всеми опциями командной строки, и подстановку (
“%s
”) для директории которая сканируется.
2. Регулярное выражение для сравнеия с выводом STDOUT и STDERR вирусного сканера. Если выражение совпадает, найден вирус. Вы должны должны быть абсолютно уверены, что это выражение совпадает с
“найден вирус
”. Его называют
“триггерным
” (
“trigger
”) выражением.
3. Иное регулярное выражение, содержащее точную пару круглых скобок, для соответствия имени найденного вируса в выводе сканера. Его называют
“именным
” (
“name
”) выражением.
Например, Sophos Sweep сообщает о вирусе в строке типа такой:
|
Для триггерного выражения, мы можем использовать совпадение с фразой
“found in file
”. Для именного выражения, мы хотим извлечь строку
“W32/Magistr-B
”, таким образом, мы можем установить соответствие для одиночных кавычек - левой и правой. В целом, создаётся такая конфигурационная установка:
|
“drweb
” - Интерфейс даемона сканера DrWeb (http://www.sald.com), получает один параметр, или полный путь к UNIX-сокету, или IP-адрес и порт, разделённые пробелом, как в этом примере:
|
Если вы опускаете этот параметр, используется дефолтовый путь -
“/usr/local/drweb/run/drwebd.sock
”. Спасибо Alex Miller, за внесение кода для этого сканера.
“fsecure
” - Интерфейс даемона сканера F-Secure (http://www.f-secure.com) принимает один аргумент, который является путём к UNIX-сокету. Например:
|
Если аргументов не задано, то значение по умолчанию -
“/var/run/.fsav
”. Спасибо Johan Thelmen, за внесение кода для этого сканера.
“kavdaemon
” - Это - сканирующий даемон Касперского 4-й версии. Эта версия сканера Касперского является устаревшей. Пожалуйста, обновитесь (смотрите выше, опцию
“aveserver
”). Этот тип санера принимает одну опцию, которая является путём к UNIX-сокету даемона. Например:
|
“mksd
” - Этот сканер нацелен главным образом на польских юзеров, хотя, сейчас, некоторые части документации доступны на английском. Вы можете получить ее на http://linux.mks.com.pl. Единственная опция этого сканера - максимальное число одновременно используемых процессов для сканирования вложений, при условии что используется средство demime, и при условии, что mksd был запущен с тем же самым числом дочерних процессов. Например:
|
Вы можете спокойно пропустить эту опцию (т.к. значение по умолчанию 1).
“sophie
” - Sophie - даемон использующий библиотеку Sophos’ libsavi для сканирования на вирусы. Вы можете получить его по адресу http://www.clanfield.info/sophie/. Для этого типа сканера есть лишь одна опция - путь к UNIX-сокету, который Sophie используется для связи с клиентом. Например:
|
Путь по умолчанию -
“/var/run/sophie
”, так что если вы используете его, то можете опустить эту опцию.
“
Когда av_scanner
” коректно установлена, вы можете использовать условие
“malware
” в DATA ACL. Отметьте: Вы не можете использовать условие
“malware
” в MIME ACL.
“
Опция av_scanner
” раскрывается при каждом вызове
“malware
”. Это позволяет использовать различные сканеры. Смотрите ниже примеры использования. Условие
“malware
” кэширует свои результаты, таким образом, вы можете использовать его неоднократно для одного и того же сообщения, фактически, процесс сканирования выполняется лишь один раз. Однако, использование раскрываемых элементов в
“av_scanner
” отключает кэширование, и каждое использование условия
“malware
” вызывает новое сканирование сообщения.
“
Условие malware
” берёт правый параметр, который раскрывается до использования. Он может быть одним из:
“true
”,
“*
”, или
“1
”, в случае чего сообщение сканируется на вирусы. Условие успешно, если найден вирус, или неудачно в ином случае. Это - рекомендуемое применение.
“false
” или
“0
” или пустая строка, в случае чего сканирования не происходит и условие немедленно неудачно.
Регулярное выражение, в случае чего сообщение сканируется на вирусы. Условие успешно если найден вирус, и его имя совпадает с регулярным выражением. Это позволяет вам предпринимать специальные действия для определённых типов вирусов.
Вы можете добавить
“/defer_ok
” к условию
“malware
” чтобы принимать сообщения даже если какие-то проблемы с вирусным сканером. В противном случае, такая проблема вызывает задержку ACL.
Когда вирус найден, условие устанавливает переменную раскрытия с именем
“$malware_name
”, которая содержит имя вируса. Вы можете использовать её в модификаторе
“message
”, который определяет ошибку, возвращаемую отправителю, и/или логгируемые данные.
Если ваш вирусный сканер не может самостоятельно распаковать MIME и TNEF контейнеры, вы должны использовать условие
“demime
” (смотрите секцию 41.6) до условия
“malware
”.
Вот - очень простой пример сканирования:
|
Следующий пример принимает сообщения когда у сканера проблемы:
|
Следующий пример показывает как использовать переменную ACL для сканирования обоими - sophie и aveserver. Он предполагает, что вы установили:
|
в главной конфигурации exim'a
|
41.2 Сканирование с SpamAssassin
Условие ACL
“spam
” вызывает даемона
“spamd
” SpamAssassin’а для получения очков за спам и отчёта для сообщения. Вы можете получить SpamAssassin по адресу http://www.spamassassin.org, или, если у вас есть рабочая инсталляция Perl, вы можете использовать CPAN, путём запуска:
|
SpamAssassin обладает собственным набором конфигурационных файлов. Пожалуйста, посмотрите его документацию, чтобы узнать, как вы можете его настроить. Однако, и дефолтовая инсталляция работает хорошо.
“
Установив и настроив SpamAssassin, запустите даемон spamd
”. По умолчанию, он слушает 127.0.0.1, TCP порт 783. Если вы используете иной хост или порт для
“spamd
”, вы должны установить лпцию
“spamd_address
” в глобальной части конфигурации exim'a, следующим образом (например):
|
Вам нет нужды устанавливать эту опцию, если вы используете значение по умолчанию. Для версии 2.60,
“spamd
” также поддерживает коммуникацию через UNIX-сокеты. Если вы хотите их использовать, установите
“spamd_address
” в абсолютный путь до сокета, вместо пары адрес/порт:
|
У вас может быть несколько серверов
“spamd
”, для улучшения масштабируемости. Они могут находиться на других железках, доступных по сети. Для задания нескольких серверов
“spamd
”, установите в опцию
“spamd_address
” несколько пар адрес/порт, разделённых двоеточиями:
|
Поддерживается вплоть до 32 серверов
“spamd
”. Сервера запрашиваются случайным образом. Когда сервер не в состоянии ответить на попытку подключения, пробуются все другие сервера, пока какой-либо не будет успешным. Если ни один сервер не ответил, условие
“spamd
” задерживается.
“
Предупреждение: Невозможно использовать соединение через UNIX-сокет с несколькими серверами spamd
”.
“
Переменная spamd_address
” раскрывается до её использования, если она начинается с символа доллара. В этом случае, раскрытие может вернуть строку которая используется как список, таким образом, результатом раскрытия может быть несколько серверов spamd.
41.3 Вызов SpamAssassin из ACL exim'a
Вот - простой пример использования условия
“spam
” в DATA ACL:
|
Правая сторона условия
“spam
” определяет имя пользователя. Это релевантно если у вас настроены многочисленные профили SpamAssasin. Если вы не хотите использовать сканирование конкретного пользователя, а хотите использовать профиль SpamAssassin как дефолтовый профиль системы, вы можете сканировать для неизвестного пользователя, или просто использовать
“nobody
”. Однако, вы должны поместить что-то в правую строну.
“
Имя позволяет вам использовать антиспамовый профили на домен, или на пользователя, но, на практике это не просто, поскольку сообщение может иметь нескольких получателей, не обязательно всех в одном домене. Поскольку условие spam
” должно быть вызывано из ACL DATA, чтобы оно могло прочесть содержимое сообщения, переменные
“$local_part
” и
“$domain
” не установлены.
“
Правая сторона раскрывается до использования, таким образом, в неё вы можете поместить поиск или условие. Когда правая строна вычисляется в 0
” или
“false
”, сканирования не происходит, и условие немедленно неуспешно.
Сканирование с помощью SpamAssassin использует много ресурсов. Если вы сканируете каждое сообщение, большие сообщения могут вызывать существенное ухудшение производительности. Поскольку, большинство спама - маленькие сообщения, рекомендуется, чтобы вы не просматривали большие. Например:
|
Условие
“spam
” возвращает истину, если происходит соответствие или превышение заданному в пользовательском профиле SpamAssassin`a. Если вы хотите использовать условие
“spam
” для его стронних эффектов (смотрите ниже, переменные), вы можете заставить его всегда возвращать
“true
”, путём добавления к имени пользователя
“:true
”.
“
Когда выполняется условие spam
”, оно устанавливает множество пеерменных раскрытия. За исключением
“
$spam_score_int
”, они доступны лишь внутри ACL; их значения не сохраняются с сообщением, и, таким образом, не могут быть использованы во время доставки.
“$spam_score
” - Счётчик очков за спам, например,
“3.4
” или
“30.5
”. Он полезен для включения в логи или сообщение о отклонении.
“$spam_score_int
” - Счётчик очков за спам, умноженный на 10, как значение целого числа. Например,
“34
” или
“305
”. Она может казаться несходящейся с
“$spam_score
”, поскольку
“$spam_score
” - окуруглена, и
“$spam_score_int
” - усечена. Целое значение полезно для цифровых сравнений в условиях. Это - специальная переменная; её значение сохраняется с сообщением, и пишется в файл спула exim'a. Это означает, что оно может быть использовано в течение всей жизни сообщения в вашей системе exim'a, в частности, роутерах или транспортах, в последующую фазу доставки.
“$spam_bar
” - Строка содержит несколько символов
“+
” или
“-
”, изображая числовую часть значения счётчика спама. Счётчик спама 4.4 имел бы значение
“$spam_bar
” равное
“++++
”. Это полезно для включения в предупреждающие заголовки, т.к. MUA могут сравнивать такие заголовки.
“$spam_report
” - Многострочная текстовая таблица, содержащая полный отчёт SpamAssassin для сообщения. Полезна для включения в заголовки, или сообщение о отклонении.
Условие
“spam
” кэширует свои результаты за исключением использования раскрытия в
“spamd_address
”. Если вы вызываете его для того же самого имени пользователя, он не сканирует заново, а снова возвращает те же самые значения.
Условие
“spam
” возвращает DEFER, если при обработке сообщения SpamAssassin'ом происходит какая-то ошибка, или неудачного раскрытия
“spamd_address
”. Если вы хотите обработать DEFER как FAIL (для перехода к следующему блоку утверждений ACL), добавьте
“/defer_ok
” к правой стороне условия
“spam
”, например так:
|
Это вызывает приём сообщения, даже если существуют проблемы со
“spamd
”.
“
Вот - более длинный, прокомментированный пример использования условия spam
”:
|
41.4 Сканирование частей MIME
Глобальная опция
“acl_smtp_mime
” определяет ACL которая вызывается для каждой MIME части SMTP сообщения, включая типы состоящие из нескольких частей (multipart), в последовательности их позиций в сообщении. Точно также, опция
“acl_not_smtp_mime
” определяет ACL, которая используется для MIME частей не-SMTP сообщений. Эти опции могут обе относиться к одной и той же ACL если вы хотите одну и ту же обработку в обоих случаях.
“
Эти ACL вызываются (возможно, несколько раз) лишь до ACL acl_smtp_data
”, в случае сообщения SMTP, или лишь до приёма не-SMTP сообщений, или, просто до ACL
“acl_not_smtp
”, в случае не-SMTP сообщения. Однако, MIME ACL вызывается лишь если сообщение содержит строку заголовка
“MIME-Version:
”. Когда вызов MIME ACL не приводит к
“accept
”, обработка ACL прерывается, и клиенту посылается соответствующий код результата. В случае SMTP-сообщения, ACL
“acl_smtp_data
” не вызывается когда это происходит.
“
Вы не можете использовать условия malware
” или
“spam
” в MIME ACL; они могут использоваться лишь в DATA или не-SMTP ACL. Однако, вы можете использовать условие
“mime_regex
” для сравнения с декодированной MIME-частью (смотрите секцию 41.5).
“
В начале MIME ACL, множество переменных устанавливаются из информации заголовков для релевантной части MIME. Это описано ниже. По умолчанию, содержимое части MIME не декодируется в файл на диске, исключая части MIME чей тип содержимого - message/rfc822
”. Если вы хотите декодировать часть MIME в файл на диске, вы можете использовать условие
“decode
”. Общий синтаксис таков:
|
Правая строна раскрывается до использования. После раскрытия значение может быть:
“
1. 0
” или
“false
”, в случае чего декодирования не происходит.
“
2. Строка default
”. В этом случае, файл кладётся во временную
“дефолтовую
” директорию
“<spool_directory>/scan/<message_id>/
” с последующим именем файла, состоящим из идентификатора сообщения и последующего номера. Полный путь и имя доступны в
“$mime_decoded_filename
” после декодирования.
“
3. Полный путь с именем начинается со слэша. Если полное имя - существующая директория, она используется как замена для дефолтовой директории. Имя файла добавляется последовательно. Если путь не существует; он используется как полный путь и имя файла.
4. Если строка не начинается со слэша, она используется как имя файла, и используется дефолтовый путь.
Условие decode
”, обычно, успешно. Оно ложно лишь для синтаксических ошибок или в необычных обстоятельтвах, типа нехватки памяти. Вы можете легко расшифровать с его оригинальным, предполагаемым именем, используя
|
Однако, вы должны иметь ввиду, что
“$mime_filename
” может содержать что угодно. Если вы помещаете файлы вне пути дефолтового пути, они не удаляются автоматически.
“
Для вложений RFC822 (сообщений вложенных в сообщения, с типом содержимого message/rfc822
”), ACL вызывается снова, таким же самым образом как для первичного сообщения, лишь если установлена переменная раскрытия
“$mime_is_rfc822
” (смотрите ниже). Приложенные сообщения всегда декодируются на диск до проверки, и файлы удаляются после завершения проверки.
“
ACL MIME поддерживает условия regex
” и
“mime_regex
”. Они могут использоваться для сравнения регулярного выражения с сырыми и декодированными частями MIME, соответственно. Они описаны в секции 41.5.
Следующий список описывает все переменные раскрытия, которые доступны в ACL MIME:
“$mime_boundary
” - Если текущая часть - multipart (смотрите ниже,
“$mime_is_multipart
”), она должна иметь граничную строку, которая сохраняется, если доступна. Если текущая часть не имеет граничного параметра в заголовке
“Content-Type:
”, эта переменная содержит пустую строку.
“$mime_charset
” - Эта переменная содержит идентификатор набора символов (кодировки), если он найден в заголовке
“Content-Type:
”. Примеры идентификаторов наборов символов:
|
Пожалуйста, отметьте, что это значение не нормализовано, таким образом, вы должны его сравнивать регистронезависимо.
“$mime_content_description
” - Эта переменая содержит нормализованное содержимое заголовка
“Content-Description:
”. Он может содержать удобочитаемое описание части содержимого. Некоторые реализации повторяют тут имя вложенного файла, но, обычно они лишь используются для целей отображения.
“$mime_content_disposition
” - Эта переменная содержит нормализованное содержимое заголовка
“Content-Disposition:
”. Тут вы можете ожидать строку типа
“attachment
” или
“inline
”.
“$mime_content_id
” - Эта переменная содержит нормализованное содержимое заголовка
“Content-ID:
”. Это уникальный идентификатор который может использоваться для ссылки на часть от другой части.
“$mime_content_size
” - Эта переменая устанавливается лишь после успешного выполнения модификатора
“decode
” (смотрите выше). Она содержит размер декодированной части в килобайтах, таким образом, лишь полностью пустые части имеют нулевой
“$mime_content_size
”.
“$mime_content_transfer_encoding
” - Эта переменная содержит нормализованное содержимое заголовка
“Content-transfer-encoding:
”. Это - символическое имя для типа кодировки. Типичное значение -
“base64
” и
“quoted-printable
”.
“$mime_content_type
” - Если у части MIME есть заголовок
“Content-Type:
”, эта переменная содержит его значение, в нижнем регистре, и без любых опций (типа
“name
” и
“charset
”). Вот - некоторые примеры популярных типов MIME, как они могут появляться в этой переменной:
|
Если часть MIME не имеет заголовка
“Content-Type:
”, эта переменная содержит пустую строку.
“$mime_decoded_filename
” - Эта переменная устанавливается лишь после успешной работы модификатора
“decode
” (смотрите выше). Его содержимое содержит полный путь и имя файла содержащего декодированные данные.
“$mime_filename
” - Это - возможно самая важная из переменных MIME. Она содержит предложенное имя файля вложения, если оно было найдено в одном из заголовков -
“Content-Type:
” или
“Content-Disposition:
”. Имя файла декодируется по RFC2047, но никаких дополнительных проверок на адекватность не производится. Если имя файла не найдено, эта переменная содержит пустую строку.
“$mime_is_coverletter
” - Эта переменная пытается различить
“конверт письма
” (
“cover letter
”) от приложенных данных. Она может быть использована для пресечения кодированного содержимого в конверте письма, не ограничивая вложения вообще. (Вообще, тут несколько иная фраза, и советую обратиться к документации, ибо смысл написанного, да ещё и с ошибками, понял лишь прочтя главу, и то не до конца - прим. lissyara).
Переменная содержит 1 (истина) для частей MIME, являющихся частями письма, и 0 (ложь) для вложений. В настоящее время алгоритм такой:
1. Самая дальняя часть MIME - всегда обёртка письма.
2. Если обёртка письма multipart/alternative или multipart/related часть MIME, следовательно, все субчасти MIME внутри - multipart.
3. Если любая другая multipart-часть - обёртка письма, первая часть - обёртка, и последующие - вложения.
4. Все части содержащиеся в пределах multipart - вложения.
Как пример, следующее правило запретит
“HTML mail
” (включая, что посылается с альтернативным чистым текстом), позволяя HTML-файлам быть прикрепленными. HTML обёртка письма, приложенная к не-HTML обёртке почты, также разрешена:
|
“$mime_is_multipart
” - Эта переменная имеет значение 1 (истина), когда текущая часть имеет главный тип
“multipart
”, например,
“multipart/alternative
” или
“multipart/mixed
”. Так как multipart объекты лишь служат контейнером для других частей, вы не можете захотеть предпринять для них специфические действия.
“$mime_is_rfc822
” - Эта переменная имеет значение 1 (истина), если текущая часть - не непосредственно часть проверяемого сообщения, но часть приаттаченного сообщения. Приложенные сообщения декодируются полностью рекурсивно.
“$mime_part_count
” - Эта переменная - счётчик, увеличивающийся для каждой обрабатываемой части MIME. Он начинается с нуля для самой первой части (которая, обычно, multipart). Счётчик - на сообщение, таким образом, он сбрасывается при обработке вложений RFC822 (смотрите
“$mime_is_rfc822
”). Счётчик остаётся установленным после завершения
“acl_smtp_mime
”, таким образом, вы можете использовать его в DATA ACL для опредления числа частей MIME в сообщении. Для не-MIME сообщений, эта переменная содержит
“-1
”.
41.5 Сканирование с регулярными выражениями
Вы можете задать ваши собственные регулярные сообщения, совпадающие с полным телом сообщения, или индивидуальными частями MIME.
“
Условие regex
” получает одно или более регулярное выражение как аргумент, и сравнивает его с полным сообщением (при вызове в DATA ACL), или сырой частью MIME (при вызове в MIME ACL). Условие
“regex
” сравнивается построчно, с максимальной длинной строки в 32k символов. Это означает, что вы не можете получить многострочные сравнения с условием
“regex
”.
“
Условие mime_regex
” может быть вызывано лишь в ACL MIME. Оно сравнивается вплоть до 32k декодированного содержимого (всё содержимое сразу, не построчно). Если часть не была декодирована с модификатором
“decode
” ранее в ACL, она автоматически декодируется при выполнении
“mime_regex
” (используя дефолтовый путь и значение имени файла). Если декодированные данные более 32k, проверяются лишь первые 32k.
“
Регулярные выражения передаются как список разделённый двоеточиями. Для включения символа двоеточия, вы должны его удвоить. Так как правая строка раскрыватся до использования, вы, также, должны экранировать символ доллара и обратные слэши обратными слэшами, или используя средство \N
”, для отключения раскрытия. Вот - простой пример, который содержит два регулярных выражения:
|
Условие возвращает истину, если совпадает любое регулярное выражение. Тогда устанавливается переменная раскрытия
“$regex_match_string
”, и содержит соответтсвующее регулярное выражение.
Предупреждение: С большими сообщениями, это условие может быть довольно ресурсоёмким.
41.6 Условие
“demime
”
Условие ACL
“demime
” предоставляет распаковку MIME, проверяя корректность и блокируемые расширения файлов. Оно может использоваться лишь в DATA и не-SMTP ACL. Условие
“demime
” использует более простой интерфейс к декодированию MIME, чем функциональность MIME ACL, но не предоставляет никаких дополнительных средств. Пожалуйста, отметьте, что это условие устарело, и оставлено лишь для обратной совместимости. Вы должны установить опцию WITH_OLD_DEMIME в
“Local/Makefile
” во время сборки, для возможности использовать условие
“demime
”.
“
Условие demime
” распаковывает в сообщении контейнеры MIME. Оно детектирует ошибки в MIME контейнерах, и может сравнивать расширения файлов найденные в сообщении со списком. Использование этого средства приводит к файлам содержащим распакованные части MIME сообщения во временной директории сканирования. Если вы производите сканирование антивирусом, рекомендуется использовать условие demime до условия антивируса (
“malware
”).
“
В правой строне условия demime
” вы можете поместить список, разделённый двоеточиями, расширений файлов, с которыми оно будет сравниваться. Например:
|
Если найдено одно из расширений файлов, условие истинно, иначе - ложно. Если при демимизации происходит временная ошибка (например,
“disk full
”), условие задержано, и сообщение временно отклоняется (если только в условии не стоит команда
“warn
”).
“
Правая строна раскрывается до использования как списка, таким образом, вы можете использовать в ней поиск. Если раскрытие приводит к пустой строке, false
”, или нулю (
“0
”), демимизации не происходит и условие неудачно.
“
Условие demime
” устанавливает следующие переменные:
“
$demime_errorlevel
” - Когда в контейнере MIME детектируется ошибка, эта переменная содержит серьёзность ошибки, как целое число. Чем выше значение, тем более серьёзная ошибка (текущее максимальное значение - 3). Если эта переменная незадана, или нулевая, ошибок не было.
“
$demime_reason
” - Когда
“$demime_errorlevel
” более нуля, эта переменная содержит удобочитаемую текстовую строку описывающую встреченную ошибку MIME.
“
$found_extension
” - Когда условие
“demime
” истинно, эта переменная содержит найденное расширение файла.
“
Обе, $demime_errorlevel
” и
“$demime_reason
” устанавливаются при первом вызове условия
“demime
”, и не изменяются при последующих вызовах.
“
Если вы не хотите проверять расширения файлов, а использовать условие demime
” для распаковки или с целью проверки ошибок, поместите
“*
” в правую строну. Вот - более сложный пример использования этого средства:
|
=============
translated by lissyara
verifying by Gerk
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK