САМОУЧИТЕЛЬ PHP 4

Файл конфигурации Apache httpd.conf


Это приложение содержит полный текст файла конфигурации сервера Apache httpd.conf

с комментариями на русском языке.

Содержимое листинга П1.1 полностью соответствует указаниям по настройке Apache, приведенным в части II книги. Если у вас по какой-то причине не получится правильно установить Apache и PHP версии 4, руководствуясь этими указаниями, представленный ниже текст файла httpd.conf решит все проблемы.

Несколько слов о формате httpd.conf. Файл состоит из строк, содержащих директивы Apache. В одной строке может быть расположено не более одной директивы. Текст от # äо конца строки считается комментарием и не берется в рассмотрение. Также игнорируются пустые строки.

При изменении начальной конфигурации файла возможно группирование нескольких директив в блоки, или контейнеры. При этом Apache поддерживает только ограниченное количество допустимых типов контейнеров. Любой блок-контейнер начинается строкой вида <ИмяКонтейнера>, расположенной, как обычно, на отдельной строке, и завершается тэгом </ИмяКонтейнера>. Некоторые (но не все) блоки могут быть вложенными.

Директивы, касающиеся индивидуальных настроек для каталогов или файлов, могут также помещаться в специальные файлы .htaccess, расположенные в соответствующих местах дерева каталогов сайта. Эти файлы должны иметь тот же формат, что и httpd.conf. Однако для них имеются особые ограничения на использование директив и блоков — список недопустимых можно найти в документации, поставляемой с Apache.

Листинг П1.1. Файл конфигурации Apache httpd.conf

# Основан на конфигурационных файлах сервера NSCA, созданных

# Робом МакКулом.

#

# Главный файл конфигурации сервера Apache, содержащий директивы,

# управляющие работой сервера. За более детальной информацией



# обращайтесь по адресу http://www.apache.org/docs/.

#

# Не стоит читать эти директивы без понимания их роли. Они

# приведены здесь лишь в качестве примера одного из возможных

# вариантов. В случае сомнений обращайтесь к сопроводительной


# документации. Считайте, что вас предупредили.

#

# После просмотра и анализа файла httpd.conf сервер

# попробует найти и обработать файлы:

# C:/Program Files/Apache Group/Apache/conf/srm.conf, а затем

# C:/Program Files/Apache Group/Apache/conf/access.conf,

# если вы не переопределили эти имена директивами ResourceConfig

# и/или AccessConfig.

#

# Директивы конфигурации сгруппированы в три основных раздела:

#

# 1. Директивы, управляющие процессом Apache в целом (глобальное

#    окружение).

# 2. Директивы, определяющие параметры "главного" сервера, или

#    сервера "по умолчанию", отвечающего на запросы, которые

#    не обрабатываются виртуальными хостами. Эти директивы задают

#    также установки по умолчанию для всех остальных виртуальных хостов.

# 3. Установки для виртуальных хостов, позволяющие обрабатывать

#    запросы Web одним-единственным сервером Apache, но направлять

#    по раздельным IP-адресам или именам хостов.

#

# Файлы конфигурации программы и журналы регистрации событий

# (в программисткой среде они чаще называются "конфигами" и "логами",

# так что, я думаю, ничего страшного не произойдет, если я буду

# придерживаться этой терминологии и здесь).

# Если имена файлов, определенных вами для управления сервером,

# начинаются с символа / (или "диск:/" для Win32), сервер будет

# использовать явно указанный в этом имени полный путь. Если же имена не

# начинаются с "/", то для определения пути будет задействовано значение

# директивы ServerRoot. Так, logs/foo.log при значении ServerRoot,

# равном /usr/local/apache, будет интерпретироваться сервером как

# /usr/local/apache/logs/foo.log.

#

# Внимание: В определении имен файлов вы должны использовать прямые слэши

# вместо обратных (т. е. c:/apache вместо c:\apache). Если не указано

# имя диска, по умолчанию будет выбран диск, на котором размещен

# Apache.exe; тем не менее, во избежание путаницы, рекомендуется, чтобы



# вы всегда явно указывали в абсолютных путях имя диска.

#

### Раздел 1: Глобальное окружение

#

# Директивы в этом разделе определяют общие параметры Apache, такие как,

# например, число запросов, которое он может обрабатывать одновременно,

# или где ему искать свои файлы конфигурации.

#

# Директива ServerType может иметь значения inetd или standalone.

# Режим inetd поддерживается только на платформах Unix.

ServerType standalone

#

# ServerRoot: вершина дерева каталогов, в которых содержатся файлы

# конфигурации, регистрации и отслеживания ошибок.

#

# В конце строки добавлять слэш не следует!

ServerRoot "C:/Program Files/Apache Group/Apache"

#

# PidFile: Файл, куда сервер при запуске должен записывать свой

# идентификатор процесса.

PidFile logs/httpd.pid

#

# ScoreBoardFile: Учетный файл, предназначенный для хранения внутренней

# информации процесса сервера. Он необходим не для всех архитектур.

# Если для вашей он нужен (об этом можно судить по тому, будет ли создан

# такой файл, когда вы запустите Apache), то вы должны

обеспечить, чтобы

# никакие два экземпляра процесса Apache не использовали один и тот же

# учетный файл.

ScoreBoardFile logs/apache_runtime_status

#

# В стандартной конфигурации сервер обработает при запуске файлы

# httpd.conf, srm.conf и access.conf (именно в таком порядке).

# Последние два файла в настоящее время поставляются пустыми, поскольку

# теперь рекомендуется для простоты, чтобы все директивы указывались в

# одном файле (httpd.conf).

# Закомментированные ниже значения встроены в сервер по умолчанию.

# Если вы используете другие имена файлов, отредактируйте и

# раскомментируйте "умолчальные". Если потребуется, чтобы сервер

# проигнорировал эти файлы, вы можете указать значения /dev/null (для

# Unix) или nul (для Win32).

#ResourceConfig conf/srm.conf

#AccessConfig conf/access.conf

#

# Timeout: Время ожидания в секундах, прежде чем сервер примет или

# отправит сообщение о тайм-ауте.



Timeout 300

#

# KeepAlive: Признак, позволено или нет устанавливать долговременные

# соединения (persistent connections) (т.е. когда обрабатывается более

# одного запроса на соединение). Для запрета укажите значение Off.

KeepAlive On

#

# MaxKeepAliveRequests: Максимальное число запросов, допустимое в одном

# долговременном соединении. Для снятия ограничений обнулите параметр,

# но для максимального быстродействия мы рекомендуем указать заведомо

# большое конкретное значение.

MaxKeepAliveRequests 100

#

# KeepAliveTimeout: Время ожидания в секундах следующего запроса от

# одного и того же клиента в одном подключении.

KeepAliveTimeout 15

#

# Для обработки запросов Apache для Win32 всегда порождает один дочерний

# процесс. Если он по каким-либо причинам будет преждевременно завершен,

# другой дочерний процесс создается автоматически. Поступающие запросы

# внутри такого дочернего процесса обрабатываются отдельными потоками.

# Следующие две директивы управляют поведением таких потоков и процессов.

#

# MaxRequestsPerChild: Число запросов, которое позволено обрабатывать

# дочернему процессу до переполнения. При переполнении дочерний процесс

# будет принудительно завершен, чтобы избежать проблем при длительной

# непрерывной работе, если Apache (или используемые им библиотеки),

# допускают утечку памяти или других ресурсов. На большинстве систем

# это не требуется, но некоторые (например, Solaris) имеют заметные

# утечки в библиотеках. Если нет других рекомендаций, для Win32

# установите значение 0 (без ограничений).

#

MaxRequestsPerChild 0

#

# ThreadsPerChild: Число одновременно выполняющихся потоков (т.е.

# запросов), которое допускает сервер. Установите это значение в

# соответствии с требуемой загрузкой сервера (больше активных запросов

# одновременно означает, что они обслуживаются медленнее) и объемом

# системных ресурсов, который вы можете предоставить серверу.

#

ThreadsPerChild 50

#

# Listen: Позволяет привязать Apache к конкретному адресу IP, и/или



# порту, в дополнение к порту, определенному по умолчанию. См. также

# директиву <VirtualHost>.

#

#Listen 3000

#Listen 12.34.56.78:80

#

# BindAddress: Этой опцией вы можете обеспечить поддержку виртуальных

# хостов. Данная директива используется для указания серверу адреса IP,

# который необходимо отслеживать. Она может содержать *, адрес IP или

# полное имя домена Интернета. См. также директивы <VirtualHost> и Listen.

#

#BindAddress *

#

# Поддержка динамически разделяемых объектов (DSO, Dynamic Shared Object)

#

# Для того чтобы иметь возможность использовать модуль, созданный как

# библиотека DSO, вам следует поместить в этом месте соответствующую

# строку LoadModuleТогда модуль будет доступен

# прежде

обращения к нему.

# За детальными разъяснениями механизмов DSO вы можете обратиться к

# файлу README.DSO в дистрибутиве Apache 1.3, а также выполнить

# команду 'apache -l', чтобы получить список уже встроенных

# (статически скомпонованных и таким образом всегда доступных)

# модулей сервера Apache.

#

# Внимание: Порядок, в котором загружаются модули, имеет большое

# значение. Не меняйте нижеследующий порядок без консультации со

# специалистом.

#

#LoadModule anon_auth_module modules/ApacheModuleAuthAnon.dll

#LoadModule dbm_auth_module modules/ApacheModuleAuthDBM.dll

#LoadModule digest_auth_module modules/ApacheModuleAuthDigest.dll

#LoadModule cern_meta_module modules/ApacheModuleCERNMeta.dll

#LoadModule digest_module modules/ApacheModuleDigest.dll

#LoadModule expires_module modules/ApacheModuleExpires.dll

#LoadModule headers_module modules/ApacheModuleHeaders.dll

#LoadModule proxy_module modules/ApacheModuleProxy.dll

#LoadModule rewrite_module modules/ApacheModuleRewrite.dll

#LoadModule speling_module modules/ApacheModuleSpeling.dll

#LoadModule info_module modules/ApacheModuleInfo.dll

#LoadModule status_module modules/ApacheModuleStatus.dll

#LoadModule usertrack_module modules/ApacheModuleUserTrack.dll

#

# Директива ExtendedStatus определяет, будет ли Apache генерировать



# детальную информацию о состоянии (ExtendedStatus On) или только

# общую информацию (ExtendedStatus Off) при обращении к функции

# server-status. Значение по умолчанию — Off.

#

#ExtendedStatus On

### Раздел 2: Конфигурация сервера по умолчанию

#

# Директивы этого раздела устанавливают значения, используемые "главным

# сервером", который отвечает на запросы, не обрабатываемые виртуальными

# хостами. Эти значения обусловливают также установки по умолчанию для

# любых контейнеров <VirtualHost>, которые вы будете определять

# здесь далее.

#

# Любые из директив раздела могут быть включены в контейнер

# <VirtualHost>; в таком случае установки по умолчанию будут

# переопределены ими для этого виртуального хоста.

#

#

# Если в директиве ServerType (установленной ранее в разделе "Глобальное

# окружение") задано значение inetd, следующие несколько директив не

# имеют никакого эффекта, поскольку их значение определено конфигурацией

# inetd. Переходите к директиве ServerAdmin.

#

# Port: Номер порта, к которому подключен сервер.

#

Port 80

#

# ServerAdmin: Ваш адрес, по которому следует направлять сообщения о

# проблемах с сервером. Этот адрес появится на некоторых сгенерированных

# сервером страницах, таких, как сообщения об ошибках.

#

ServerAdmin you@your.address

#

# Директива ServerName задает имя хоста, возвращаемое клиенту, если это

# имя отличается от того имени, которое получила программа (например,

# используйте www вместо реального имени хоста).

#

# Внимание: Вы не можете просто выдумывать имена хостов в надежде, что

# это сработает. Имя, которое вы определяете здесь, должно быть

# действительным именем DNS для вашего хоста. В случае затруднений с

# пониманием изложенного справьтесь у

# администратора сети.

# Если ваш хост не имеет зарегистрированного имени DNS, вы можете указать

# здесь его адрес IP. В таком случае вам придется обращаться к хосту по

# адресу (например, http://123.45.67.89/) и это может сильно осложнить



# переадресацию ресурсов.

#

ServerName localhost

#

# DocumentRoot: Каталог, в котором будут находиться ваши документы (т.е.

# Web-страницы). По умолчанию, все запросы выбираются из этого каталога;

# для указания же других мест могут использоваться символические ссылки

# (links) и псевдонимы (aliases).

#

DocumentRoot "z:/home/localhost/www"

#

# Каждый каталог, к которому Apache имеет доступ, может быть

# сконфигурирован в отношении свойств и сервисов, которые могут быть

# разрешены и/или запрещены в этом каталоге (и его подкаталогах).

#

# Сначала мы определяем свойства "по умолчанию".

#

<Directory z:/>

  Options Indexes Includes

  AllowOverride All

  allow from all

</Directory>

#

# Обратите внимание, что с этого места и далее вы должны явным образом

# указывать свойства, которые могут быть разрешены, — так что, если что-то

# не работает так, как вы ожидаете, сначала убедитесь, что вы разрешили

# это свойство ниже.

#

# Здесь должен быть указан каталог, который вы установили как

# DocumentRoot.

#

#<Directory "z:/home/localhost/www">;

#

# Опции могут иметь значения None, All или любую комбинацию из

# Indexes, Includes, FollowSymLinks, ExecCGI или MultiViews.

#

# Заметьте, что MultiViews должен быть указан отдельно —

# Options All для этого не достаточно.

#

#   Options Indexes FollowSymLinks MultiViews

#

# Директива перечисляет опции, которые могут быть переопределены в

# файлах .htaccess. Значением может быть All или любая комбинация из

# Options, FileInfo, AuthConfig и Limit.

#

#    AllowOverride None

#

# Эти директивы определяют, какие пользователи имеют доступ к информации,

# расположенной на этом сервере.

#

#    Order allow,deny

#    Allow from all

#</Directory>

#

# UserDir: Название каталога, которое прибавляется к именам

# пользовательских домашних каталогов при получении запроса ~user

# (например, http://www.server.com/~username).

#

# Под Win32 мы в настоящее время не пытались устанавливать каталог



# регистрации пользователя, поэтому приходится работать с форматом,

# приведенным ниже.

#

<IfModule mod_userdir.c>

    UserDir "C:/Program Files/Apache Group/Apache/users/"

</IfModule>

#

# DirectoryIndex: Имя файла (или файлов), используемое в качестве

# предопределенной страницы-указателя или оглавления. Если вы указываете

# несколько имен, разделяйте их пробелами.

#

<IfModule mod_dir.c>

        DirectoryIndex index.htm index.html

</IfModule>

#

# AccessFileName: Имя файла, который сервер ищет в каждом каталоге для

# определения прав доступа.

#

AccessFileName .htaccess

#

# Следующие строки предотвращают доступ к файлам .htaccess со стороны

# Web-клиентов. Поскольку файлы .htaccess нередко содержат информацию об

# аутентификации, доступ к ним запрещен из соображений безопасности. Вы

# можете удалить эти строки (или поставить символ комментария),

# если допускаете, чтобы посетители могли просматривать содержимое файлов

# .htaccess из Web. Если вы поменяете значение директивы AccessFileName

# выше, не забудьте внести и сюда соответствующие изменения.

#

<Files ~ "^\.ht">

    Order allow,deny

    Deny from all

</Files>

#

# CacheNegotiatedDocs: По умолчанию с каждым документом Apache отправляет

# инструкцию "Pragma: no-cache", что является указанием proxy-серверам не

# кэшировать данный документ. Если раскрыть следующую строку, то

# поведение proxy-серверов изменится и им будет разрешено кэшировать

# документы.

#

#CacheNegotiatedDocs

#

# UseCanonicalName: (Впервые в версии 1.3.) Если эта директива включена

# (On), то всякий раз, когда Apache требуется создать ссылку на самого

# себя (self-referencing URL, т.е. адрес сервера, с которого поступает

# ответ на запрос), для формирования "канонического имени" он будет

# использовать значения директив ServerName и Port, когда это возможно.

# Если директива выключена (Off), Apache будет по возможности

# использовать значения, предоставленные клиентом. Эта директива влияет



# также на значения переменных SERVER_NAME и SERVER_PORT в CGI-сценариях.

#

UseCanonicalName On

#

# Директива TypesConfig описывает расположение файла mime.types

# (или его эквивалента).

#

<IfModule mod_mime.c>

    TypesConfig conf/mime.types

</IfModule>

#

# Директива DefaultType определяет MIME-тип, который будет использоваться

# для какого-либо документа, если сервер не сможет определить его по иным

# признакам, например, по расширению имени файла. Если ваш сервер

# содержит по большей части тексты или HTML-документы, text/plain

# является приемлемым решением. Если большая часть содержимого является

# исполняемыми файлами или изображениями, вы можете поменять значение на

# application/octet-stream, чтобы предотвратить попытку браузера

# показать содержимое двоичного файла.

#

DefaultType text/plain

#

# Модуль mod_mime_magic позволяет серверу использовать разнообразные

# приемы определения типа файла по его содержимому. Директива

# MIMEMagicFile указывает ему файл, где даны описания таких приемов.

# По умолчанию mod_mime_magic не включен в состав сервера (вы должны

# загрузить его сами с помощью директивы LoadModule — см. абзац DSO в

# разделе "Глобальное окружение", или заново откомпилировать сервер

# с этим модулем), поэтому директива MIMEMagicFile заключена в контейнер

# <IfModule>. Это означает, что она будет обработана только в том случае,

# если модуль mod_mime_magic уже загружен.

#

<IfModule mod_mime_magic.c>

    MIMEMagicFile conf/magic

</IfModule>

#

# Директива HostnameLookups определяет, регистрировать ли клиентов по

# именам, или только по адресам IP, т.е. www.apache.org (On) или

# 204.62.129.132 (Off). По умолчанию — Off, поскольку для снижения

# нагрузки на сеть было бы лучше, если бы вы использовали эту

# возможность, зная о последствиях, т. к. отслеживание по именам означает,

# что каждый клиентский запрос приведет как минимум

к еще одному запросу

# к серверу имен для преобразования IP-адреса в имя.



#

HostnameLookups Off

#

# ErrorLog: Расположение файла регистрации ошибок. Если вы не определяете

# директиву ErrorLog внутри контейнера <VirtualHost>, сообщения об

# ошибках, возникших при работе этого хоста, будут записаны в указанный

# ниже файл. В противном случае все сообщения направятся в специфичный

# для виртуального хоста журнал.

#

ErrorLog logs/error.log

#

# LogLevel: Определение характера ошибок, которые записываются в

# error.log. Возможные значения в порядке убывания количества сообщений:

# debug, info, notice, warn, error, crit, alert, emerg.

#

LogLevel warn

#

# Следующие директивы указывают псевдонимы некоторых форматов, которые

# используются в директиве CustomLog (см. ниже).

#

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent

#

# Расположение и формат файла регистрации (лога). Если вы не определяете

# никаких лог-файлов внутри контейнера <VirtualHost>, сведения

# будут записываться здесь. Если же вы определяете отдельный лог-файл

# для виртуального хоста, доступ будет отслеживаться в этом логе,

# но не здесь.

#

CustomLog logs/access.log common

#

# Если вы хотите, чтобы имелся агент ссылочных логов (referer logfiles

# agent), раскомментируйте следующие директивы.

#

#CustomLog logs/referer.log referer

#CustomLog logs/agent.log agent

#

# Если вы предпочитаете иметь один лог-файл с информацией о доступе,

# агентах и ссылках (комбинированный формат лог-файла), вы можете

# использовать следующую директиву.

#CustomLog logs/access.log combined

#

# Позволяет добавить дополнительную строку, содержащую версию сервера и

# имя виртуального хоста на страницах, сгенерированных сервером

# (сообщениях об ошибках, листингах каталогов FTP, в вывод модулей

# mod_status и mod_info, но не в CGI-документах). Чтобы дополнительно



# включить ссылку mailto:, содержащую значение директивы ServerAdmin,

# установите значение EMail.

# Допустимые значения: On | Off | Email

#

ServerSignature On

#

# Apache по умолчанию анализирует первую строку каждого CGI-сценария.

# Если эта строка является комментарием и выглядит так: символ (#),

# затем восклицательный знак (!) и, наконец, путь к

# программе-интерпретатору, по которому осуществляется запуск

# сценария, Apache запускает этот интерпретатор.

# Например, для perl-сценариев, стартуемых под управлением perl.exe

# из каталога C:\Program Files\Perl, эта строка должна выглядеть так:

# !c:/program files/perl/perl

# Внимание: вы не должны вставлять пробелы перед символом (#). Êðîìå

# òîãî, указанная специальная строка должна быть именно первой строкой

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

# CGI — например, путем указания директивы ScriptAlias или

# Options ExecCGI.

#

# Тем не менее, Apache для Windows позволяет в дополнение к "магической"

# строке использовать Реестр для поиска ассоциаций с расширениями.

# Команда для запуска файла указанного типа в этом случае ищется в

# Реестре точно так же, как это происходит, например, при работе

# Проводника, когда вы выполняете двойной щелчок на файле. Действия по

# запуску сценария могут быть сконфигурированы из меню Вид Проводника.

# Там необходимо выбрать Свойства папки

и переключиться на вкладку

# Типы файлов. Нажатие на кнопку Изменить позволяет задать действие,

# которое Apache выполнит при попытке открытия файла. Если это не

# удастся, Apache будет искать интерпретатор при помощи "магической"

# строки. Возможно, поведение сервера изменится в Apache версии 2.0.

#

# Чтобы разрешить это специфичное для Windows поведение сервера и, таким

# образом, запретить анализ "магической" строки, удалите комментарий

# со следующей директивы:

#

ScriptInterpreterSource registry



#

# Эта директива может быть помещена в отдельный блок <Directory> или

# в файл .htaccess с указанием в качестве значения registry

# (поведение Windows) или script (анализ "магической" строки, принятый

# в Unix). В таком случае она будет перекрывать директиву, расположенную

# здесь, в главном конфигурационном файле сервера.

#

#

# Псевдонимы: Можно добавлять любое количество псевдонимов (без

# ограничений).

# Формат: Alias псевдоним действительное_имя

#

<IfModule mod_alias.c>

    # Обратите внимание, что если вы включаете завершающий слэш в

    # "псевдоним", то сервер потребует его присутствия и в URL. Так,

    # /icons не будет разыменован в данном примере, только /icons/.

    #

    Alias /icons/ "C:/Program Files/Apache Group/Apache/icons/"

    <Directory "C:/Program Files/Apache Group/Apache/icons">

        Options Indexes MultiViews

        AllowOverride None

        Order allow,deny

        Allow from all

    </Directory>

    #

    # ScriptAlias: Указывает каталог, который содержит серверные

    # сценарии. Свойства ScriptAlias’ов такие же, как и у простых

    # псевдонимов, за исключением того, что документы в каталоге

    # "действительное_имя" считаются приложениями и выполняются

    # на сервере, а не отправляются клиенту. К директиве

    # ScriptAlias применяются те же правила в отношении

    # завершающего /, что и к Alias.

    #

    ScriptAlias /cgi-bin/ "z:/home/localhost/cgi/"

    ScriptAlias /cgi/ "z:/home/localhost/cgi/"

</IfModule>

# Конец определений псевдонимов.

#

# Директива Redirect позволяет сообщить клиенту о документе, который

# существовал некогда в пространстве имен сервера, но был перемещен

# в другое место. Она информирует клиента о его новом адресе.

#

# Формат: Redirect старый_URL новый_URL

#

#

# Директивы, управляющие генерацией сервером  листингов каталогов.

#

<IfModule mod_autoindex.c>



    #

    # FancyIndexing означает, что вы предпочитаете листинги с

    # "украшательствами". О других возможных значениях директивы

    # IndexOptions см. сопроводительную документацию.   

    #

    IndexOptions FancyIndexing

    #

    # Директивы AddIcon* указывают серверу, какими ярлыками

    # будут украшены имена файлов в листинге каталога. Ярлыки    

    # изображаются только в режиме FancyIndexing.

    #

    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

    AddIconByType (TXT,/icons/text.gif) text/*

    AddIconByType (IMG,/icons/image2.gif) image/*

    AddIconByType (SND,/icons/sound2.gif) audio/*

    AddIconByType (VID,/icons/movie.gif) video/*

    AddIcon /icons/binary.gif .bin .exe

    AddIcon /icons/binhex.gif .hqx

    AddIcon /icons/tar.gif .tar

    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv

    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip

    AddIcon /icons/a.gif .ps .ai .eps

    AddIcon /icons/layout.gif .html .shtml .htm .pdf

    AddIcon /icons/text.gif .txt

    AddIcon /icons/c.gif .c

    AddIcon /icons/p.gif .pl .py

    AddIcon /icons/f.gif .for

    AddIcon /icons/dvi.gif .dvi

    AddIcon /icons/uuencoded.gif .uu

    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl

    AddIcon /icons/tex.gif .tex

    AddIcon /icons/bomb.gif core

    AddIcon /icons/back.gif ..

    AddIcon /icons/hand.right.gif README

    AddIcon /icons/folder.gif ^^DIRECTORY^^

    AddIcon /icons/blank.gif ^^BLANKICON^^

    #

    # DefaultIcon определяет ярлык для файла по умолчанию

    # если он не задан явно.

    #

    DefaultIcon /icons/unknown.gif

    #

    # AddDescription позволяет размещать краткое описание после имени

    # файла в индексах (листингах каталогов), сгенерированных сервером.

    # Такие описания выводятся только в режиме FancyIndexing.

    #

    # Формат: AddDescription "строка_описания" .расширение_имени_файла

    #

    #AddDescription "GZIP compressed document" .gz



    #AddDescription "tar archive" .tar

    #AddDescription "GZIP compressed tar archive" .tgz

    #

    # ReadmeName задает имя README-файла, который добавляется к листингу

    # каталога по умолчанию.

    #

    # HeaderName указывает имя файла, выводимого в

    # заголовке листингов каталога.   

    #

    # Если задана директива MultiViews в числе значений Options,

    # сначала сервер попытается открыть файл имя.html и включит его в

    # листинг, если файл существует. Если файл имя.html не существует,

    # сервер переориентируется на открытие файла

    # имя.txt и включение его в листинг в виде простого текста.

    #

    ReadmeName README

    HeaderName HEADER

    #

    # IndexIgnore описывает набор имен файлов, которые должны быть

    # исключены из листинга. В именах допустимы метасимволы подстановки

    # в стиле shell.

    IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

</IfModule>

# Конец секции директив управления листингами.

#

# Типы документов.

#

<IfModule mod_mime.c>

    #

    # AddEncoding позволяет вам заставить определенные браузеры

    # (Mosaic/X 2.1+) распаковывать информацию "на лету".

    # Внимание: это свойство поддерживают не все браузеры. Несмотря

    # на сходство имен, нижеприведенные директивы Add* не

    # имеют ничего общего с директивами оформления FancyIndexing,

    # приведенными выше.   

    #

    AddEncoding x-compress Z

    AddEncoding x-gzip gz tgz

    #

    #

    # AddLanguage позволяет указать язык документа. Вы можете затем

    # использовать протокол обмена (content negotiation) для выдачи

    # браузеру документа на том языке, который он (браузер) предпочитает.

    #

    # Примечание 1: Суффикс не обязательно должен совпадать с буквенным

    # кодом языка — те, у кого есть документы на польском языке

    # (стандартный сетевой буквенный код pl), могут воспользоваться

    # директивой AddLanguage pl .po во избежание конфликта с



    # распространенным суффиксом сценариев на языке Perl.

    #

    # Примечание 2: Нижеследующие примеры показывают, что в нескольких

    # случаях двухбуквенный код языка не совпадает с двухбуквенным кодом

    # страны.

    # Например, "Датский/da" вместо "Дания/dk".

    #

    # Примечание 3: В случае ltz мы нарушаем требования RFC, используя

    # трехбуквенный код. Но уж тут ничего не поделаешь. В будущем,

    # возможно, несоответствия с RFC1766 будут устранены.

    #

    # Коды языков:

    # датский (Danish) da; голландский, Нидерланды (Dutch) nl;

    # английский (English) en; эстонский (Estonian) ee;

    # французский (French) fr; немецкий (German) de;

    # новогреческий (Greek-Modern) el; итальянский (Italian) it;

    # португальский (Portuguese) pt;

    # люксембургский (Luxembourgeois*) ltz;

    # испанский (Spanish) es; шведский (Swedish) sv;

    # каталонский (Catalan) ca; чешский (Czech) cz;

    # русский (Russian) ru.

    #

    AddLanguage da .dk

    AddLanguage nl .nl

    AddLanguage en .en

    AddLanguage et .ee

    AddLanguage fr .fr

    AddLanguage de .de

    AddLanguage el .el

    AddLanguage he .he

    AddCharset ISO-8859-8 .iso8859-8

    AddLanguage it .it

    AddLanguage ja .ja

    AddCharset ISO-2022-JP .jis

    AddLanguage kr .kr

    AddCharset ISO-2022-KR .iso-kr

    AddLanguage no .no

    AddLanguage pl .po

    AddCharset ISO-8859-2 .iso-pl

    AddLanguage pt .pt

    AddLanguage pt-br .pt-br

    AddLanguage ltz .lu

    AddLanguage ca .ca

    AddLanguage es .es

    AddLanguage sv .se

    AddLanguage cz .cz

    AddLanguage ru .ru

    AddLanguage tw .tw

    AddCharset Big5         .Big5    .big5

    AddCharset WINDOWS-1251 .cp-1251

    AddCharset CP866        .cp866

    AddCharset ISO-8859-5   .iso-ru

    AddCharset KOI8-R       .koi8-r

    AddCharset UCS-2        .ucs2

    AddCharset UCS-4        .ucs4

    AddCharset UTF-8        .utf8

    # LanguagePriority позволяет определить первоочередность некоторых



    # языков при установлении протокола обмена.

    #

    # Возможно, вы захотите изменить предложенный порядок языков. Просто

    # перечислите их в порядке убывания приоритета.

    #

    <IfModule mod_negotiation.c>

        LanguagePriority en da nl fr de el it ja no pl pt ru ca es sv tw

    </IfModule>

    #

    # AddType позволяет слегка подправить mime.types, не редактируя его,

    # или объявить конкретные файлы имеющими определенный тип.

    #

    # Например, модуль PHP3 (этот модуль не является частью дистрибутива

    # сервера Apache), обычно использует следующие объявления:   

    #

    #AddType application/x-httpd-php3 .php3

    # AddType application/x-httpd-php3-source .phps

    #

    # В случае PHP 4.x укажите:

    #

    AddType application/x-httpd-php .php

    # AddType application/x-httpd-php-source .phps

    # Следующие строки не относятся к заданию типов документов,

    # но их удобно поместить сюда для подключения PHP:

    #

    ScriptAlias /_php/ "C:/Program Files/PHP4/"

    Action application/x-httpd-php "/_php/php.exe"

    AddType application/x-tar .tgz

    #

    # AddHandler позволяет отобразить определенные расширения имен файлов

    # на обработчиков вне связи с определениями типов файлов. Обработчики

    # могут быть как встроены в сервер, так и объявлены директивой

    # Action (см. ниже).

    #

    # Если вы хотите использовать файлы, вставляемые сервером в ваши

    # документы (SSI — server side includes), снимите комментарий

    # со следующих строк:

    #

    # для использования сценариев CGI —

    #

    AddHandler cgi-script .bat .exe .cgi

    #

    # для HTML-файлов, предварительно обрабатываемых

    # сервером (server-parsed HTML files):

    #

    AddType text/html .shtml

    AddHandler server-parsed .shtml .html .htm

    #

    # Раскомментируйте следующую строку, чтобы разрешить Apache передачу

    # специальных файлов, которые не сопровождаются стандартными



    # заголовками HTTP (send-asis HTTP file).

    #

    # AddHandler send-as-is asis

    #

    # Если вы хотите использовать карты-изображения, обрабатываемые

    # сервером, раскройте следующую директиву:   

    #

    # AddHandler imap-file map

    #

    # Если вы хотите задействовать карты типов (type maps, см.

    # документацию), используйте:   

    #

    # AddHandler type-map var

</IfModule>

# Конец блока директив описания типов документов.

#

# Директива Action позволяет определить приложение, выполняющее сценарии,

# когда запрашиваются содержащие их файлы. Это устраняет необходимость

# многократного упоминания URL часто используемых процессоров

# CGI-сценариев.

# Формат: Action псевдоним_типа /псевдоним_пути/обработчик

#         Action среда/тип /псевдоним_пути/обработчик

#

#

# MetaDir: определяет имя каталога, в котором Apache может найти файлы с

# метаинформацией. Эти файлы содержат дополнительные заголовки HTTP,

# включаемые при отправке определенных документов.

#

# MetaDir .web

#

# MetaSuffix устанавливает суффикс имени файла, содержащего метаинформацию.

#

# MetaSuffix .meta

#

# Настраиваемая реакция на ошибки (собственный стиль Apache) может быть

# трех типов.

#

# 1) простой текст

#    ErrorDocument 500 "Сервер сказал а-я-яй!"

#    Внимание: знак двойной кавычки просто означает, что далее следует

#    текст.

#

# 2) локальная переадресация

#    Чтобы перенаправить на локальный документ:

#    ErrorDocument 404 /missing.html

#    Перенаправлять можно и на сценарий, и на документ, использующий

#    включения на стороне сервера:

#    ErrorDocument 404 /cgi-bin/missing_handler.pl

#

# 3) внешняя переадресация

#    ErrorDocument 402 http://some.other_server.com/info.html

#    Большинство переменных окружения, связанных с исходным запросом,

#    станут недоступны при такой переадресации.

#

# Установки, связанные с браузером пользователя.

#

<IfModule mod_setenvif.c>

    #

    # Следующие директивы отменяют поддержку долговременных соединений



    # (keepalives) и "смывание" заголовков HTTP. Первая директива

    # отменяет их для Netscape 2.x и браузеров, которые "притворяются",

    # что они — Netscape (известны некоторые проблемы с такими 

    # браузерами). Вторая директива предназначена для Microsoft Internet

    # Explorer 4.0b2, реализация HTTP/1.1 которого не полна и не

    # поддерживает должным образом keepalive, когда он используется в

    # откликах 301 или 302 (переадресация).

    #

BrowserMatch "Mozilla/2" nokeepalive

BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0

    #

    # Следующая директива отключает отклики по HTTP/1.1 браузерам,

    # которые нарушают стандарты HTTP/1.0 и не могут разобрать

    # основной отклик 1.1.   

    #

    BrowserMatch "RealPlayer 4\.0" force-response-1.0

    BrowserMatch "Java/1\.0" force-response-1.0

    BrowserMatch "JDK/1\.0" force-response-1.0

</IfModule>

# Конец настроек, связанных с браузерами.

#

# Следующая группа директив управляет отчетами о состоянии сервера,

# имеющего URL http://servername/server-status. Для приведения в

# соответствие с вашими нуждами измените .your_domain.com.

#

# <Location /server-status>

#    SetHandler server-status

#    Order deny,allow

#    Deny from all

#    Allow from .your_domain.com

# </Location>

#

# Эта группа директив управляет отчетами конфигурации удаленного

# сервера http://servername/server-info (требуется, чтобы был загружен

# mod_info.c). Замените .your_domain.com на имя вашего домена.

#

# <Location /server-info>

#    SetHandler server-info

#    Order deny,allow

#    Deny from all

#    Allow from .your_domain.com

# </Location>

#

# Поступали сообщения, что некие люди пытаются злоупотреблять древней

# ошибкой старых версий Apache. Ошибка касалась CGI-сценария,

# поставлявшегося с Apache.

# Раскрыв следующие строки, вы можете переадресовать эти атаки



# на регистрирующий сценарий на phf.apache.org. А можете регистрировать

# их сами, используя сценарий support/phf_abuse_log.cgi.

#

# <Location /cgi-bin/phf*>

#    Deny from all

#    ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi

# </Location>

#

# Директивы proxy-сервера.

#

# <IfModule mod_proxy.c>

    # Раскройте следующую строку для того, чтобы разрешить

    # работу с proxy.

    # ProxyRequests On

    # <Directory proxy:*>

    #   Order deny,allow

    #   Deny from all

    #   Allow from .your_domain.com

    # </Directory>

 

    #

    # Разрешить/запретить обработку заголовков HTTP/1.1 Via:.

    # Возможные значения: Off | On | Full | Block. Full добавляет в

    # заголовок версию сервера, Block удаляет все исходящие

    # заголовки Via:.   

    #

    # ProxyVia On

    #

    # Для разрешения также кэширования отредактируйте и раскройте

    # следующие строки (нельзя включать кэширование без указания

    # CacheRoot):   

    #

    # CacheRoot "C:/Program Files/Apache Group/Apache/proxy"

    # CacheSize 5

    # CacheGcInterval 4

    # CacheMaxExpire 24

    # CacheLastModifiedFactor 0.1

    # CacheDefaultExpire 1

    # NoCache a_domain.com another_domain.edu joes.garage_sale.com

# </IfModule>

# Конец настроек proxy-сервера.

### Раздел 3: Виртуальные хосты

#

# Директива VirtualHost: Если вы хотите держать на своей машине несколько

# хостов, следует для каждого из них завести контейнер VirtualHost.

# Прежде чем их устанавливать, обращайтесь за подробными разъяснениями к

# документации по адресу http://www.apache.org/docs/vhosts/. Для проверки

# конфигурации ваших виртуальных хостов вы можете задавать опцию -S

# командной строки.

#

# Если вы хотите использовать именные виртуальные хосты (name-based

# virtual hosts), вам необходимо определить для них как минимум один

# адрес IP (и номер порта).

#

NameVirtualHost 127.0.0.1:80

#

# Пример использования директивы VirtualHost:



# В контейнер VirtualHost может включаться почти любая

# директива Apache.

#

# <VirtualHost ip.address.of.host.some_domain.com>

#    ServerAdmin webmaster@host.some_domain.com

#    DocumentRoot /www/docs/host.some_domain.com

#    ServerName host.some_domain.com

#    ErrorLog logs/host.some_domain.com-error_log

#    CustomLog logs/host.some_domain.com-access_log common

# </VirtualHost>

# <VirtualHost _default_:*>

# </VirtualHost>

# Далее идут настройки для виртуальных хостов, описанных во второй

# части этой книги.

#----localhost

<VirtualHost localhost>

  ServerAdmin webmaster@localhost.ru

  ServerName localhost

  DocumentRoot "z:/home/localhost/www"

  ScriptAlias /cgi/ "z:/home/localhost/cgi/"

  ErrorLog z:/home/localhost/error.log

  CustomLog z:/home/localhost/access.log common

</VirtualHost>

#----hacker

<VirtualHost hacker>

  ServerAdmin webmaster@hacker.ru

  ServerName hacker

  DocumentRoot "z:/home/hacker/www"

  ScriptAlias /cgi/ "z:/home/hacker/cgi/"

  ErrorLog z:/home/hacker/error.log

  CustomLog z:/home/hacker/access.log common

</VirtualHost>

#----cracker

<VirtualHost cracker>

  ServerAdmin webmaster@cracker.ru

  ServerName cracker

  DocumentRoot "z:/home/cracker/www"

  ScriptAlias /cgi/ "z:/home/cracker/cgi/"

  ErrorLog z:/home/cracker/error.log

  CustomLog z:/home/cracker/access.log common

</VirtualHost>

# Конец главного файла конфигурации Apache.

[1] Русский язык, изначально обладающий гигантской свободой в выборе слова, постоянно развивается. То, что казалось неприемлемым вчера, сегодня становится нормой, и наоборот. Безусловно, у любого обратившего внимание на эти строки при прочтении слов "закачать" и "скачать" вряд ли возникнут ассоциации с бригадой мускулистых администраторов, придающих передаваемым по сети файлам необходимую кинетическую энергию для последующего перемещения под напором, или другие неверные мысли, несмотря на большое количество смысловых оттенков употребления этих слов (убаюкивать, вызвать головокружение, или же в понимании "подлого приема садовников, торговцев присадками (раскачивать деревце, не давая ему укорениться)"). Вообще говоря, о твердых правилах в условиях возрастающего слияния разговорных терминов и литературного языка говорить не приходится. В толковом словаре С. И. Ожегова и Н. Ю. Шведовой дано пояснение идиоме "Закачаешься!" как выражения высокой оценки чего-либо. Редакторы вовсе не стремятся убивать живое изложение, и поэтому если вы, уважаемые читатели, также видите эти строки, значит было решено — "быть закачиваемому" (из примеров к статье "Закачать" толкового словаря живого великорусского языка В. И. Даля). — Ред.



 [AL1]Обороты “и это хорошо” и “ и это правильно” очень часто встречаются и мне не кажутся удачными

 [AL2]такой синтаксис отнюдь не исключение, к примеру можно взять макроассемблер

 [E3]это так? в коде нет никаких операторов вывода

 [E4]Иначе надо писать “обеих”, а это — неблагозвучный термин

 [В. О.5]Самодокументруемые?

 [В. О.6]разобраться

 [В. О.7]не что иное?

 [В. О.8]?

 [В. О.9]Запятая?

 [В. О.10]По поводу точек в программировании

 [В. О.11]шести?

 [В. О.12]Мне кажется, это не всем понравится

 [В. О.13]?

 [В. О.14]Вряд ли это понравится читателю, тем более, что Вы очень хорошо изложили суть

 [В. О.15]?

 [В. О.16]Запятая?

 [В. О.17]Почему? Хэш — он и в Африке хэш.

 [В. О.18]!

 [В. О.19]Это как-то уж слишком по-программистки,  но не по-книжному

 [В. О.20]а разве должно быть иначе? Автоинкремент и автодекремент, по логике, разве применимы к булевскому типу?

 [В. О.21]Потенциальной?

 [В. О.22]Прочитал и не понял

 [В. О.23]Извините, но требования издательства не допускают такого оформления

 [В. О.24]ценна ли здесь эта фраза?

 [В. О.25]3.1459…

 [В. О.26]а вдруг 4? Как насчет у-Си-дки и Perlюстрации?

 [В. О.27]Из-за "уменьшив"

 [В. О.28]?

 [В. О.29]Может, изменить название переменной — а то "a" отдельно от последующих слов поначалу не воспринимается?

 [В. О.30]!

 [В. О.31]!

 [В. О.32]Пробел внесен сознательно?

 [В. О.33]Наличие пробелов не вредит смыслу?

 [В. О.34]Си-подобные операторы или нет?

 [В. О.35]Противопоставление Си неверно, Вы, безусловно, это понимаете

 [В. О.36]Ни что иное

 [В. О.37]считаю, что эту формулировку следует исключить или же я бы посоветовал Вам заменить этот жаргон на изначальное название символа — "коммерческое эт". Мне кажется, "оживляжа" и так достаточно



 [В. О.38]может быть, лучше что-то нейтральное?

 [AL39]Я думаю, Вы имели в виду именно это, или же "осознанна"?

 [AL40]такие слова не пропускает корректор

 [AL41]мне кажется, так лучше. Ваше мнение?

 [AL42]ENVIROPMENT?

 [AL43]надежно?

 [AL44]написать "кнопкой" или оставить Ваш стиль?

 [AL45]"Обновите ваш PHP!"

 [AL46]"наша версия PHP отстала от жизни"

 [E47]?

 [E48]?

 [E49]Не понял

 [E50]?

 [E51]в обоих смыслах

 [E52]обычно уточняют что-то вроде “В двух строках разной длины каждый символ более длинной строки без соответствующего символа в более короткой строке принимает значение "больше";

например, 'Xs' больше, чем 'X'. Пустые строки могут быть равны только другим пустым строкам, и они являются наименьшими текстовыми значениями”

 [E53]Для однообразия

 [E54]Для устранения “коридора” (коридоры образуют пробелы между словами в строках, которые следуют одна за другой)

 [E55]первых или последних?

 [E56]?

 [E57]Это особенность алгоритма или тавтология? Если первое, то тогда какой же это хэш?

 [E58]В разделе всего одна функция. Заголовок не совсем соответствует.

 [E59]Скользит, перебирает элементы?

 [E60]Не понял, речь идет о перегрузке функций? Или это не описанная ранее особенность PHP?

 [E61]Плоховато, но более ничего не удалось подобрать

 [E62]При выборке небольших размеров

 [E63]почему же, для интерактивных карт могут применяться (речь идет о больших системах, содержащих мелкомасштабные карты земной поверхности)

 [E64]“…все равно, какой ориентации придерживается слэш”?

 [E65]?

 [E66]Не понял, кажется, здесь нарушена логика

 [E67]блочно?

 [E68]Чем отличается от предыдущего?

 [E69]

 [E70]звучит как “по пути”

 [E71]Может лучше было было бы использовать структурный элемент типа “Совет”? Или оставить до просмотра коректором? Я спрошу, имеется ли что-нибудь типа “заповедь” или “резюме”



 [E72]

 [E73]?

 [E74]Alias – псевдоним или синоним?

 [E75] Разделитель внутри есть? Или он и есть – пробел?

 [E76]Милли или микро?

 [E77]Åñëè àêöåíò äåëàåòñÿ íà ïóòàíèöó ìèëëè-ìèêðî, то может, стоит употребить кавычки?

 [E78]Это ее не касается?

 [E79]Вот-вот, Word, как и справочники, считает, что папу-основоположника звали ГрИгорием… (ñðàâíèòå: Julian и Gregorian)

 [E80]странновато звучит фраза: и конкретно и вместе с тем “кажется”

 [E81]Несколько строк?

 [E82]На что?

 [E83]Ну это Вы зря…

 [E84]желательно бы добавлять номер, поскольку мне нужно выделять ссылки курсивом

 [E85]?

 [E86]Эта “навороченность” имеет место…?

 [E87]?

 [E88]Не удовлетворяет требованиям

 [E89]а у BHV ничего подобного нет?

 [E90]?

 [DK91]Подойдет.

 [E92]4.07 Netscape не поддерживает, 4.6 – не помню.

 [DK93]Правда? Очень странно… Может быть, Вы просто не поставили в нем поддержку PNG при инсталляции?

 [E94]?

 [DK95]Подойдет.

 [E96](на первый взгляд, не “технологичная”) ?

 [DK97]Да. Но нужно ли уточнять?..

 [E98]Может, стоило бы уточнить определение: ведь по сути если цвет, указанный в качестве “прозрачного”, содержится в “не фоновой” части, он выводится. А не отображается от только для фоновой части при равенстве цвета  фона и “прозрачного” цвета. Меня просто несколько коробит от таких определений, поскольку постигая это на практике, я вынужден был все выяснять сам. А извлекать по крохам такие сведения из примеров не есть хорошо

 [DK99]Вы точно в этом уверены? Если у нас есть картинка, и у нее 10-й цвет назначен прозрачным, то В ЛЮБОМ СЛУЧАЕ точки с цветом 10 не будут выведены в браузер (а значит, то, что под ними было, останется нетронутым). И что значит – «фоновая часть»?



 [E100]E9

 [DK101] Вы хотите убрать такую формулировку? Я думал, читатель улыбнется, когда это прочтет – это была моя первоочередная задача. Ведь чем более непринужденно написана книга, тем легче ее читать, не правда ли?..

 [E102]функция идет от API, где именно множество параметров, и во всех языках наследуется именно со множеством, если только не ссылается на массивы координат

 [DK103]Но, все же, использование большого числа параметров в функции – дурной стиль, об этом еще, кажется, Керниган писал.

 [E104]Не только потому. Изначально эта функция на удивление медленная на системном уровне (BIOS).

 [DK105]Думаю, при выводе точки BIOS не используется.

 [E106]моноширинном, монохромном?

 [DK107]Имеется в виду – только 2 цвета: цвет фона и цвет текста, никаких разноцветных букв. Термин «монохномный» слишком часто ассоциируется с «черно-белым».

 [E108]Нет никакого связанного определения

 [DK109]Запямятовал написать.

 [E110]вот именно, что от корня. Возвращаясь к вопросу во второй (кажется), главе.

То есть само наличие слэша перед путем не говорит о том, что этот путь абсолютный

 [DK111]Я всегда считал, что «абсолютный путь» означает «путь от корня»?..

 [DK112]Имеется в виду использование функции realpath().

 [E113]А как насчет переносимости?

 [DK114]Нет, именно «прямоугольника» - все углы прямые (хотя прямоугольник – это тоже параллелограмм). Возможно, он будет наклонен, но все равно останется прямоугольником.

 [E115]почему Вы его не вставили в книгу? Может стоит?

 [DK116]Потому что он будет не осень хорошо смотреться на бумаге, да еще в книге. Кроме того, пользователь не может, задавая различные параметры и наклон текста, «перерисовать» его прямо на странице книги. На всякий случай я высылаю Вам и рисунок (23.1). Доверяю Вашему решению – вставлять его или нет.

 [DK117]В том-то идея, что она ничего не предоставляет программисту, а только выводит «статистику».

 [DK118]Нет. У меня выводится: «4.0.3pl1»



 [E119] Приложения по требованиям издательства нумеруются по-русски, буквами.

У Вас только два приложения (пока?)

 [DK120]Ошибся.

 [E121]«захватывать»?

 [E122]отладке?

 [DK123]Нет, при ПРОГРАММИРОВАНИИ.

 [E124]?

 [E125]Не понял смысла. Кстати, финализатор и шаблонизатор – стандартные термины?

 [DK126]Финализатор – да, шаблонизатор – нет (о том, что это такое, рассказывается пятой части, которую я пока еще не дописал).

 [E127]Качеств?

 [DK128]Правил.

 [E129]??

ILoveYou в разрезе

Дмитрий КИРСАНОВ

------------------

Сам по себе вирус ILoveYou является текстом программы на языке Visual

Basic. При переименовании кода Visual Basic в файл с расширением VBS

программа становится исполняемой. Это и лежит в основе как этого

вируса, так и Melissa и еще сотен им подобных.

ILoveYou простой, но изощренный вирyс - автор решил оставить свою метку

везде, где он только может :). В то же время он пренебрег простейшим

шифрованием текста, и более того, оставил о себе подпись, составляющyю

первые две строки:

rem barok -loveletter(vbe) <i hate go to school>

rem by: spyder / ispyder@mail.com / @GRAMMERSoft Group / Manila,

Philippines

И дальше, во время анализа текста вирyса родилось чувство, что его

автор не так давно изучил Visual Basic. Настолько детально были

соблюдены книжные правила написания программ.

Вот с чего вирус начинается:

set wscr=CreateObject("WScript.Shell")

rr=wscr.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting

Host\Settings\Timeout")

if (rr>=1) then...

ILoveYou читает вышеуказанную ветку реестра, и если значение больше или

равно единице, то обнуляет его.

После этого он узнает все специальные папки системы: Windows, System и

temp. Используя полученные данные, копирует себя в файлы

SYSTEM\MSKernel32.vbs, WINDOWS\Win32DLL.vbs и

SYSTEM\LOVE-LETTER-FOR-YOU.TXT.vbs.

Следующим шагом троянца становится запись в реестр:



"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\

Run\MSKernel32" теперь содержит ссылку на MSKernel32.vbs, а

"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\

RunServices\Win32DLL" на Win32DLL.vbs.

В результате этого вышеуказанные скрипты запускаются каждый раз при

запуске Windows. Но, в чем отличительная черта именно этого вируса, все

повторяется сначала! Опять зараженный компьютер начинает рассылать свои

копии кому попало, опять пишет в реестр... Очевидно, это просто ошибка

автора скрипта.

После этого троянец выясняет, есть ли у пользователя в системной папке

файл WinFAT32.exe. И если есть, то играет сам с собой в рулетку,

получая случайное число от 1 до 4. И вот здесь скрипт делает совсем

неприятную вещь - в зависимости от полученного числа, изменяет

стартовую страницу в Internet Explorer на одно из 4-х значений:

1. "http://www.skyinet.net/~young1s/

HJKhjnwerhjkxcvytwertnMTFwetrdsfmhPnjw6587345gvsdf7679njbvYT/

WIN-BUGSFIX.exe"

2. "http://www.skyinet.net/~angelcat/

skladjflfdjghKJnwetryDGFikjUIyqwerWe546786324hjk4jnHHGbvbmKLJKjhkqj4w/

WIN-BUGSFIX.exe"

3. "http://www.skyinet.net/~koichi/

jf6TRjkcbGRpGqaq198vbFV5hfFEkbopBdQZnmPOhfgER67b3Vbvg/ WIN-BUGSFIX.exe"

4. "http://www.skyinet.net/~chu/

sdgfhjksdfjklNBmnfgkKLHjkqwtuHJBhAFSDGjkhYUgqwerasdjhPhja

sfdglkNBhbqwebmznxcbvnmadshfgqw237461234iuy7thjg/ WIN-BUGSFIX.exe"

Информацию о файле WIN-BUGSFIX.exe вирyс помещает в

"HKEY_Current_User\Software\Microsoft\Internet Explorer\Main\Start Page"

Более того, папкой для загружаемых из Internet файлов становится C:\ ,

а значит, как только пользователь запускает Explorer, броyзер тянется

за Win-Bugsfix.exe. И, если пользователь соглашается на загрузку файла,

вирyс предлагает сохранить его в корневом каталоге диска C. При

известной беспечности пользователя, может сработать. К сожалению,

Win-Bugsfix.exe оказалась для меня недостyпной, поэтомy не удалось



пообщаться с этой программой. Однако, можно предположить, что ее

назначение - уничтожить FAT-32.

Если пользователь загрузил файл в корневой каталог, то при следующем

срабатывании троянец запишет в

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\

CurrentVersion\Run\WIN-BUGSFIX команду запуска этого файла. При

очередной загрузке программа сработает. И тогда же троянец изменит

стартовую страницу Explorer на about:blank.

В продолжение своей деструктивной деятельности он берет список всех

дисков компьютера и один за другим листает все файлы. Все vbs-, vbe-,

js-, jse-, css-, wsh-, sct- и hta-файлы становятся копиями троянца,

также он удаляет файлы jpeg и jpg, заменяя их файлами с тем же именем

но с расширением VBS. Скажем спасибо автору троянца, что он забыл

поставить команду удаления для mp3- и mp2-файлов. Для них будут просто

созданы файлы с расширением vbs. Правда, с атрибутом Read-Only,

наверное, против неопытных пользователей.

Затем, если вирyсy посчастливилось найти папку с mIRC, в файл

script.ini он записывает команды, суть которых сводится к тому, что

пользователь, заходя в каждый канал, будет автоматически, сам того не

подозревая, рассылать троянца каждому посетителю (кроме самого себя)

под видом LOVE-LETTER-FOR-YOU.HTM.

Ну, и в заключение, троянец рассылает через MS Outlook каждому адресату

в адресной книжке собственнyю копию. Тема письма - "ILOVEYOU",

приложенный файл - LOVE-LETTER-FOR-YOU.TXT.vbs из системной папки,

HTML-послание содержит мета-таги, с указанием на автора, один из

которых, Description, говорит: "Простой, но, я думаю, он хорош...".

Последнее замечание насчет самого послания. Для того чтобы оно

"сработало", необходимо, чтобы в Explorer по умолчанию запускались

активные скрипты и ActiveX контролы, т. к. по умолчанию Outlook Express

всегда будет предупреждать пользователя о возможной опасности

содержимого.

 [DK130]Спасибо за присланную интересную статью. Думаю, добавления слова «типа» будет достаточно?..



 [E131]Только реляционная

 [E132]понять, что имеется в виду, можно только приблизительно. Насколько до меня дошло, подразумевается просто раскрученный рулон, то есть его вытянутость?

 [E133]В конце предыдущего раздела говорится, что “обычно” è “хостинг-провайдер”.

Текст абзаца несколько избыточен

 [E134]При работе с установленным соединением или в принципе?

 [E135]«велик, могуч и богат»?

 [DK136]Ну да, но тут главное – то, что в этой главе описаны далеко не все возможности.

 [DK137]Да, пожалуй.

 [E138]Настоятельно рекомендую как-то продолжить абзац, поскольку слово “результат” ðàñõîäèòñÿ ñ îáùåïðèíÿòîé òåðìèíîëîãèåé. Например: “Я же придерживаюсь и буду придерживаться другой терминологии: результат — “он и в Африке” результат (это, конечно, грубовато)”. Иначе боюсь, с имеющимся количеством правок текст не пройдет дальше. Термин dataset – стандартен, а если взглянуть в PHP Manual (у меня имеется только PHP3), то вот характерный пример: “mysql_result() returns the contents of one cell from a MySQL result set.” Обратите внимание – “результирующего набора”!

 [DK139]Думаю, средний читатель не особо знаком с базами данных, поэтому чем проще терминология, тем, наверное, будет лучше.

 [E140]?

 [DK141]О «текущей строке» говорится чуть позже, так что, думаю, пока будет лучше оставить «очередную». У меня такой метод – от простого к сложному: сначала рассказываю обо всем загрубленно (то есть, на частных примерах), а потом детализирую и исправляюсь.

 [E142]Опять-таки по поводу “результата”: “в результате” чего-то…

 [DK143]Тут «в результате» – не устойчивый оборот, а «в чем?»

 [E144]вот у базы данных синонимов нет

 [E145]а решает ли это задачу именно в данном контексте? Ведь AUTO_INCREMENT

допустим только для одного поля таблицы. А если другой “администратор” опередит?

 [DK146]Безусловно решает. Просто нужно получать идентификатор уже ПОСЛЕ вставки записи. Об этом рассказано ниже.

 [E147]

 [DK148]Мне не очень нравится это слово. Далеко не все читатели поймут, что оно обозначает здесь, в заглавии. Может, лучше вернуть?..

 [DK149]Сыграем на контрастах?..

 [E150]примечание для верстальщика – сохранить интервал (пустую строку)

 [E151]Примечание для верстки – обойтись без переноса


Содержание раздела