Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Интернет-программирование в массы! #1(2) Переменные и установка Апача с ПХП


Информационный Канал Subscribe.Ru


intro
Взглянул я на то, что пришло мне в почтовый ящик после выпуска пилот-выпуска и мне чуть не стало плохо от того, что я увидел... Весь "дизайн", если это можно так назвать:), был обезображен и теперь совсем никуда не годился... И тогда я решил его немного поменять -- вот что у меня получилось. Также там я раскопал одно письмо от подписчика, который попросил написать как ставить Апач и ПХП под *Никсы. Я, к сожалению, до сих пор на них не перебрался из-за отсуствия таковой возможности (хотя и очень хочется), но материал по этой теме нашел. Решил его никак не перерабатывать, а то потом меня будете бить:) за то, что что-то не так встало. Обратите внимание, что PHP версии 3, т.е. четвертая может ставиться иначе. Просто мануала под четвертую я не нашел. Итак, читайте, учитесь:) На сайт сегодня кину и мануал и статью по установке Апача. Там просто ищите линк на эти архивы. Т.к. сам сайт еще не готов:).
Вверх
Переменные. Intro
Я решил посвятить пару статей такому важному разделу в изучении PHP как "Переменные". Как и в любом другом языке программирования, в PHP существуют переменные. В PHP принято не скупиться на их объявление. Интерпретатору это обходиться довольно дешево, а коду, который мы пишем, это прибавляет читабельности. Т.е. если будет необходимость оптимизировать программу, то это Вам сильно поможет. Зачастую правильное использование переменных (точнее их имен) может заменить комментарии. Имена переменных чувствительны к регистру букв. Т.е. $MyVar, $MYVAR, $myvar - будут тремя разными переменными. Как Вы могли заметить, они все начинаются со знака доллара - $. Так интерпретатору значительно проще распознать переменную, например, в строках. Лично я поначалу постоянно забывал писать этот знак, но потом настолько привык, что начал писать его даже перед переменными в Си. В PHP нет необходимости объявлять переменную явно или указывать ее тип, интерпретатор сделает эта за Вас. Однако иногда он может ошибаться. Потому хочу познакомить Вас с типами переменных.

Типы данных.Part I
PHP поддерживает 5 типов переменных, которые я сейчас перечислю и кратко опишу.
integer -- целое число со знаком, обычно длиной 32 бита (от -2147483648 до 2147483647).
double -- вещественное число (число с плавающей точкой) довольно большой точности. Ее должно хватить для подавляющего большинства математических вычислений.
string -- строка любой длины. Строки могут содержать в себе также и нулевые символы, то есть строки можно использовать для хранения бинарных данных. Длина же строки ограничена лишь размером свободной памяти, так что вполне реально прочитать в строку целый файл объемом 200-300 килобайт. Строка может быть легко обработана с помощью стандартных функций, можно также обратиться к любому ее символу.
array -- ассоциативный массив (иначе - хэш, такое понятие, правда, для PHP не очень подходит). Это набор из нескольких элементов, каждый из которых представляет собой пару вида ключ=>значение. Доступ к отдельным элементам осуществляется указанием их ключа. Ключами могут служить не только целые числа, но и любые строки. Вот пример:

//создаем массив с ключами "0", "s", "key", "4"
$a=array(0=>"123", "s"=>"string", "key"=>"some text", 4=>"abc");

echo $a["key"]; //будет выведено "some text"

$a["1"]="123 asd"; //создадим новый элемент со значением "123 asd"
$a["s"]="new value"; //так изменим значение существующего элемента массива

object -- объект, реализующий несколько наиболее простых принципов объектно-ориентированного программирования. Внутренняя структура объекта похожа на хэш, за исключением того, что для доступа к отдельным элементам и функциям используется оператор ->, а не квадратные скобки. Об объектах мы еще поговорим в будущем.

Логические переменные. Part II
Существует и еще один тип переменых - логический. ЛОгическая переменная может содержать одно из двух значений: ложь(false) или истина(true). Любое ненулевое число или ключевое слово true означают истину; нуль, пустая строка и false - ложь. Вот пример использования такой переменной.

<?
$a=100;
if($a==100) echo "Переменная равна 100!<br>";
if($a==true) echo "Переменная истинна! <br>";
?>

После запуска мы увидим, что отображаются две строки. Если бы true была в точности равна константе 1, то вывелась бы только первая строка. Этот пример говорит о том, что часто мы забываем про то, что true не просто ненулевое значение, обычно мы считаем, что true - это единица, как многих из нас учили на Информатике в школе и вузе. А следующий пример показывает, что, вообще говоря, PHP хранит для каждой переменной признак, является ли она логической.

<?
$a=100;
$b=true;
echo "a = $a<br>";
echo "b = $b<br>";
if ($a==$b) echo 'a "равно" b!';
?>

После запуска программы мы увидим, что "a=100 и b=1", а затем программа с гордостью заявит, что "a равно b". Но тут мы уже понимаем, что переменные сравниваются как логические.
Конечно, при выполнении арифметических операций над логической переменной она превращается в обычную, числовую переменную. Кстати, замесена интересная особенность работы оператора увеличения(уменьшения) переменной на единицу (++ и--) с логическими переменными. Он не работает. Вот пример.

<?
$b=true;
echo "b: $b<br>";
$b++;
echo "b: $b<br>";
?>

Эта программа выведет оба раза значение 1. По крайней мере в версии 4.03 все именно так.

На этом сегодня я заканчиваю свой рассказ про переменные и продолжу уже в следующем выпуске.
Вверх
1. Installing PHP. 2. Installing Apache. 3. Вверх

Установка PHP под Апач.
Эта глава является руководством по конфигурации и установке PHP3. Требуемые знания и программное обеспечение:
базовые навыки работы с UNIX (на уровне выполнения команды "make" и компилятора С);
компилятор ANSI C;
web server (очевидно);
Установка из исходных кодов на UNIX:
Загрузка исходных кодов:
Исходные коды последней версии можно найти по адресу: http://www.php.net.
Инструкции по быстрой установке (версия модуля Apache):
1. gunzip apache_1.3.x.tar.gz
2. tar xvf apache_1.3.x.tar
3. gunzip php-3.0.x.tar.gz
4. tar xvf php-3.0.x.tar
5. cd apache_1.3.x
6. ./configure --prefix=/www
7. cd ./php-3.0.x
8. ./configure --with-mysql --with-apache=./apache_1.3.x --enable-track-vars
9. make
10. make install
11. cd ./apache_1.3.x
12. ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a
13. make
14. make install

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

15. cd ./php-3.0.x
16. cp php3.ini-dist /usr/local/lib/php3.ini

Вы можете отредактировать файл /usr/local/lib/php3.ini для установления опций PHP.
Если Вы предпочитаете поместить этот файл в другое место,
то используйте --with-config-file=/path в шаге 8.

17. Отредактируйте Ваш файл httpd.conf или srm.conf и добавьте:

AddType application/x-httpd-php3 .php3

Вы можете выбрать здесь любое расширение по Вашему желанию.
В данном случае мы просто рекомендуем выбрать .php3.

18. Используйте Вашу обычную процедуру для запуска сервера Apache.
(Вы должны остановить и перезапустить сервер, а не просто перезагрузить сервер
с использованием сигнала HUP или USR1).

Конфигурация:
Имеется два пути конфигурирования PHP3.
используйте скрипт "setup", который поставляется с PHP3. Этот скрипт задает Вам ряд вопросов (практически совпадающих со сценарием "install" PHP/FI 2.0) и в конце запускает "configure". Для запуска этого скрипта наберите ./setup.

Этот сценарий также создает файл, называемый "do-conf", который содержит опции, установленные при конфигурации. Вы можете редактировать этот файл для изменения некоторых опций без перезапуска "setup". Тогда выполните ./do-conf и конфигурация запустится с новыми параметрами.

выполните конфигурацию вручную. Для просмотра параметров Вы можете выполнить ./configure --help.

Детали различных параметров конфигурации рассмотрены ниже.

Модуль Apache:
Для построения PHP3 в качестве модуля Apache ответьте "yes" в пункте "Build as an Apache module?" (параметр конфигурации --with-apache= DIR ) и определить базовый каталог дистрибутива Apache. Если Вы распаковали свой дистрибутив Apache в директорию /usr/local/www/apache_1.2.4 то она и будет Вашей базовой директорией дистрибутива Apache. Директория по умолчанию /usr/local/etc/httpd.

Модуль fhttpd:
При построении fhttpd в качестве модуля fhttpd ответьте "yes" в пункте "Build as an fhttpd module?" (параметр конфигурации --with-fhttpd= DIR ) и определить базовый каталог исходных кодов fhttpd. По умолчанию это /usr/local/src/fhttpd. Если Вы запускаете fhttpd, то построение PHP3 в качестве модуля даст лучшую производительность и возможность контроля за удаленным исполнением.

Версия CGI:
По умолчанию PHP3 формируется как программа CGI. Если Вы используете web server с поддержкой PHP3 в качестве модуля, то в своих решениях Вы должны исходить из производительности. Однако CGI версия дает возможность пользователям Apache исполнять страницы с поддержкой PHP под различными идентификаторами пользователя. Пожалуйста, прочитайте Security chapter если Вы собираетесь исполнять PHP как CGI.

Параметры поддержки базы данных:
PHP имеет собственную поддержку для нескольких баз данных (так же как ODBC):

Adabas D

--with-adabas =DIR

Компиляция с поддержкой Adabas D. Параметр - установочная директория Adabas D, по умолчанию /usr/local/adabasd.

Adabas home page

dBase
    --with-dbase

Включает условный атрибут поддержки Dbase. Не требует внешних библиотек.

filePro
    --with-filepro

Включает условный атрибут поддержки filePro только для чтения. Не требует внешних библиотек.

mSQL
    --with-msql=DIR

Включает поддержку mSQL. Параметр этой опции - установочная директория mSQL, по умолчанию /usr/local/Hughes. Это директория по умолчанию дистрибутива mSQL 2.0 configure автоматически определяет, какую версию mSQL Вы используете, а PHP3 поддерживает как версию 1.0, так и 2.0, но если Вы компилируете PHP2 с версией mSQL1.0, то можете получить доступ только к базам данных mSQL1.0 и наоборот.

Посмотрите также директивы mSQL Configuration в configuration file.

mSQL home page

MySQL
    --with-mysql=DIR

Включает поддержку MySQL. Параметр в этой опции - установочная директория MySQL, по умолчанию /usr/local. Она является директорией по умолчанию в дистрибутиве MySQL.

Посмотрите также директивы MySQL Configuration в configuration file.

MySQL home page

iODBC
    --with-iodbc=DIR

Включает поддержку iODBC. Этот признак был разработан сначала для iODBC Driver Manager, перераспределяемого ODBC driver manager, который выполняется под множеством разновидностей UNIX. Параметром этой опции является установочная директория iODBC, по умолчанию /usr/local.

FreeODBC home page

OpenLink ODBC
    --with-openlink=DIR

Включает поддержку OpenLink ODBC. Параметром этой опции является установочная директория OpenLink ODBC, по умолчанию /usr/local/openlink.

OpenLink Software's home page

Oracle
    --with-oracle=DIR

Включает поддержку Oracle. Протестирован и должен работать на версиях Oracle от 7.0 до 7.3. Параметром является директория ORACLE_HOME Вы не должны определять этот параметр, если была установлена среда окружения Oracle.

Oracle home page

PostgreSQL
    --with-pgsql=DIR

Включает поддержку PostgreSQL. Параметром является базовая установочная директория PostgreSQL, по умолчанию /usr/local/pgsql.

Посмотрите также директивы Postgres Configuration в configuration file.

PostgreSQL home page

Solid
    --with-solid=DIR

Включает поддержку Solid. Параметром является установочная директория Solid, по умолчанию /usr/local/solid.

Solid home page

Sybase
    --with-sybase=DIR

Включает поддержку Sybase. Параметром является установочная директория Sybase, по умолчанию /home/sybase.

Посмотрите также директивы Sybase Configuration в configuration file.

Sybase home page

Sybase-CT
    --with-sybase-ct=DIR

Включает поддержку Sybase-CT. Параметром является установочная директория Sybase, по умолчанию /home/sybase.

Посмотрите также директивы Sybase-CT Configuration в configuration file.

Velocis
    --with-velocis=DIR

Включает поддержку Velocis. Параметром этой опции является установочная директория OpenLink ODBC, по умолчанию /usr/local/velocis.

Velocis home page

A custom ODBC library
    --with-custom-odbc=DIR

Включает поддержку для произвольной custom ODBC library. Параметром является базовая директория, по умолчанию /usr/local.

Эта опция подразумевает, что Вы определили CUSTOM_ODBC_LIBS, когда исполняется сценарий конфигурации. Вы также должны иметь правильный заголовочный файл odbc.h где-нибудь в путях включения. Если у Вас его нет, то создайте свой заголовочный файл и включите его отсюда. Он может также требовать несколько внешних определений, особенно когда это на нескольких платформах. Определите их в CFLAGS.

Например Вы можете использовать Sybase SQL Anywhere on QNX следующим образом: CFLAGS=-DODBC_QNX LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure --with-custom-odbc=/usr/lib/sqlany50

Unified ODBC
    --disable-unified-odbc

Отключает Unified ODBC модуль, который является общим интерфейсом ко всем базам данных с интерфейсом, основанным на ODBC, таких как Solid и Adabas D. Это также работает для нормальных библиотек ODBC. Был проверен с iODBC, Solid, Adabas D и Sybase SQL Anywhere. Требуется, чтобы один (и только один) из этих модулей или модуль Velocis был включен или определена пользовательская библиотека ODBC. Этот параметр применим только если используется одна из следующих опций: --with-iodbc, --with-solid, --with-adabas, --with-velocis, или --with-custom-odbc,

Посмотрите также директивы Unified ODBC Configuration в configuration file.

LDAP
    --with-ldap=DIR

Включает поддержку LDAP (Lightweight Directory Access Protocol). ). Параметром является базовая установочная директория LDAP, по умолчанию /usr/local/ldap.

Более подробную информацию по LDAP можно найти в RFC1777 и RFC1778.

Другие параметры конфигурации:
--enable-sysvsem
    --enable-sysvsem

Включает поддержку для семафоров Sys V (поддерживается большинством разновидностей UNIX). Для получения подробной информации смотрим Semaphore and Shared Memory documentation.

--enable-sysvshm
    --enable-sysvshm

Включает поддержку разделяемой памяти для Sys V (поддерживается большинством разновидностей UNIX). Для получения подробной информации смотрим Semaphore and Shared Memory documentation.

--with-xml
    --with-xml

Включает поддержку для непроверенных синтаксических анализаторов XML, используя библиотеку от James Clark's expat library. Для больших подробностей обратитесь к XML function reference.

--enable-maintainer-mode
    --enable-maintainer-mode

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

--with-system-regex
    --with-system-regex

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

--with-config-file-path
    --with-config-file-path=DIR

Маршрут, используемый для просмотра the php3.ini file при старте PHP.

--with-exec-dir
    --with-exec-dir=DIR

Разрешить только запуск исполнимых файлов в DIR при нахождении в защищенном режиме. По умолчанию это /usr/local/bin. Эта опция только устанавливает значение по умолчанию, которое потом можно изменить при помощи директивы safe_mode_exec_dir в configuration file.

--disable-debug
    --disable-debug

Не включает информацию об отладке в библиотеке или исполнимой программе. Отладочная информация просто точно указывает на ошибки, поэтому можно выключить отладку, пока PHP3 находится в стадии бета или альфа версий.

--enable-safe-mode
    --enable-safe-mode

Включает защищенный режим (safe mode) по умолчанию. Это накладывает некоторые ограничения на действия PHP, таких как открытие файлов только внутри корня документа. Для более подробной информации смотрите Security chapter Пользователи CGI всегда должны включать безопасный режим. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы safe_mode configuration file.

--enable-track-vars
    --enable-track-vars

Указывает PHP3 отслеживать пришедшие переменные GET/POST/cookie в массивах HTTP_GET_VARS, HTTP_POST_VARS и HTTP_COOKIE_VARS. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы track_vars в configuration file.

--enable-magic-quotes
    --enable-magic-quotes

Включает по умолчанию системные квоты. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы magic_quotes_runtime в configuration file. Смотрим также директивы magic_quotes_gpc и magic_quotes_sybase.

--enable-debugger
    --enable-debugger

Включает внутреннюю поддержку PHP3 debugger. Это свойство находится в стадии испытания. Смотрим также директивы Debugger Configuration в configuration file.

--enable-discard-path
    --enable-discard-path

Если это включено, то бинарный PHP CGI может быть безопасно помещен вне дерева web и пользователи не смогут обойти защиту .htaccess. Читайте об этой опции section in the security chapter.

--enable-bcmath
    --enable-bcmath

Включает стиль bc произвольной точности математических функций. Смотрим также опцию bcmath.scale в configuration file.

--enable-force-cgi-redirect
    --enable-force-cgi-redirect

Включает проверку безопасности для внутренних переадресаций сервера (redirect). Вы должны использовать это, если запускаете CGI версию с Apache.

Когда PHP используется в качестве исполняемого CGI, PHP по умолчанию сначала всегда проверяет, что используется переадресацией (например под Apache, используя директивы Action). Это дает уверенность, что исполняемый PHP не может использоваться для того, чтобы обойти стандартные процедуры установления прав web сервера путем непосредственного вызова, как например http://my.host/cgi-bin/php/secret/doc.html. Этот пример, доступен на http://my.host/secret/doc.html но игнорирует все установленные httpd правила безопасности для директории /secret.

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

Читайте об этой опции в section in the security chapter.

--disable-short-tags
    --disable-short-tags

Отключает краткую форму <? ?>тегов PHP3. Вы должны отключить краткую форму, если хотите использовать PHP3 c XML. При отключенной краткой форме принимается только тег PHP3 <?php ?>. Эта опция только устанавливает значение по умолчанию, которое потом можно включить или выключить при помощи директивы short_open_tag в configuration file.

--enable-url-includes
    --enable-url-includes

Дает возможность выполнять код на других HTTP и FTP серверах непосредственно из PHP3 с include(). Смотрим также опцию include_path в configuration file.

--disable-syntax-hl
    --disable-syntax-hl

Выключает синтаксическое выделение.

CPPFLAGS и LDFLAGS
При сборке PHP3 установщик просматривает заголовочные и библиотечные файлы в различных директориях, измените соответственно переменные окружения CPPFLAGS и LDFLAGS. Если Вы используете нормальный shell, то вы должны написать LDFLAGS=-L/my/lib/dir CPPFLAGS=-I/my/include/dir ./configure

Построение:
Когда PHP3 сконфигурирован, Вы готовы к построению исполнимых CGI или библиотеку PHP3. Об этом заботится команда make. Если Вы потерпели неудачу и не можете понять почему, то смотрите раздел Problems section.

VPATH

Проверка:
Если Вы собрали PHP3 в качестве программы CGI, Вы можете проверить результат, выполнив команду make test. Это хорошая идея - проверить результат сборки. Этим способом Вы можете обнаружить проблему с Вашим PHP3 на ранней стадии, вместо того, чтобы бороться с этим позже.

Контрольное тестирование:
Если Вы собрали PHP3 в качестве программы CGI, Вы можете протестировать свою версию при помощи команды make bench. Обратите внимание, что если используется защищенный режим по умолчанию, то тест может не завершиться, если он требует больше, чем 30 секунд. Это происходит потому, что set_time_limit() () не может быть использована в защищенном режиме. Используйте max_execution_time для контроля этого времени в Ваших собственных сценариях. make bench игнорирует configuration file

Вверх к разделу статей "Установка"

Работа с Web-сервером Russian Apache.
Русский Apache
Самый распространенный Web-сервер в мире - это Apache. По данным компании Netcraft (http://www.netcraft.com/ Survey/) общее число Web-узлов, работающих под его управлением, к концу 1998 г. достигло 2 млн. (55% общего числа узлов) и постоянно растет. Для сравнения: на долю серверов Microsoft приходится 25%, Netscape -7%. Будучи бесплатной открытой программой, предназначенной для бесплатных же Unix-систем (FreeBSD, Linux и др.), Apache по функциональным возможностям и надежности не уступает коммерческим серверам, а широкие возможности конфигурирования позволяют настроить его для работы практически с любой конкретной системой. Существуют локализации сервера для различных языков, в том числе и для русского.
Исторически сложилось так, что русские тексты в Internet могут быть представлены в разных кодировках, из которых наиболее распространены koi8-r (или просто koi8) и Windows-1251: с первой работает большинство серверов и рабочих станций под управлением Unix, вторая является стандартной для всех версий Windows. Поскольку кодировка Windows-1251, естественно, применяется на подавляющем большинстве клиентских машин, доля тех, кто путешествует по русской части WWW, используя koi8, не превышает сейчас 5%. Однако в этой кодировке хранятся документы на многих Unix-серверах, в ней чаще всего передаются почтовые сообщения и практически всегда - письма в телеконференции, с ней же работают многие русскоязычные каналы IRC (кстати, аббревиатура КОИ расшифровывается как "код обмена информацией"). Чтобы решить проблемы, возникающие при несовпадении кодировок текста на сервере и клиентской машине, и был создан русский модуль Apache-RUS для Web-сервера Apache.
В статье мы рассмотрим процесс установки и настройки как самого сервера, так и механизма перекодирования документов "на лету".
Установка
Свежую версию Apache-RUS можно получить по адресу ftp://apache.lexa.ru/pub/apache-rus/ ("старшая" часть номера версии, например 1.3.3, соответствует версии оригинального Apache, "младшая", например PL27.3, - так называемому patch level, т. е. версии русского модуля). Рекомендуется устанавливать те версии, которые зарекомендовали себя как "стабильные". Здесь настройка сервера описывается на примере Apache_1.3.3rusPL27.3.
Итак, первым делом мы переписываем на свою машину архив (менее 1,5 Мбайт) и распаковываем его:
# ftp ftp://apache.lexa.ru/pub/apache-rus/ apache_1.3.3rusPL27.3.tar.gz
# tar xvzf apache_1.3.3rusPL27.3.tar.gz
После этого входим в созданный при распаковке каталог apache_1.3.3rusPL27.3 и запускаем сценарий configure:
# cd apache_1.3.3rusPL27.3
# ./configure
При необходимости сценарию можно в явной форме указать аргументы (их список выдается по команде configure -help). Так, если требуется установить сервер в иной каталог, нежели стандартный, нужно выполнить "configure -prefix=<path-to-apache>".
Когда configure отработает, следует, как обычно, дать команды make и make install (эти действия выполняются пользователем root).
# make
# make install
Теперь сервер установлен в каталоге /usr/local/apache, но запускать его пока нельзя - сначала мы должны отредактировать файлы настройки httpd.conf, access.conf и srm.conf в каталоге /usr/local/apache/etc/ (начиная с версии 27.4 - /usr/local/apache/conf).
Настройка
Настройка конфигурационных файлов Web-сервера - самый ответственный шаг при его установке. Здесь мы рассмотрим только наиболее распространенные директивы и их параметры, поскольку полный перечень с описанием займет не один десяток страниц. Сервер перечитывает конфигурационные файлы при запуске, а также при получении сигнала -HUP (жесткий рестарт) или -uSR1 (мягкий рестарт). Если сервер находится в рабочем состоянии, то при изменении конфигурации его рекомендуется перезапустить командой
# kill -USR1 cat /usr/local/apache/logs/httpd.pid
В этом случае имеющиеся соединения не закрываются принудительно и завершаются обычным образом, а следующие клиенты работают уже с новыми конфигурационными файлами.
Файл access.conf
В access.conf содержатся директивы, описывающие права доступа к каталогам и файлам Web-сервера. Прежде всего решите, в каком каталоге будут храниться документы. По умолчанию это /usr/local/apache/share/htdocs, однако многие администраторы предпочитают размещать документы начиная с каталога /www/<имя_сервера>/, поскольку при такой организации проще ориентироваться в структуре файлов. Пусть, например, мы создали каталоги:
/www/rmt.ru/
/www/radio-msu.net/
/www/people.radio-msu.net/
Они будут корневыми для соответствующих виртуальных серверов.
Файл access.conf может содержать секции Directory, Location и Files, которые ограничены одноименными директивами. В параметрах этих директив могут использоваться символы "?" и "*" , а также регулярные выражения, предваряемые тильдой, например <Directory ~"^/www.+/a?server">. В секции Directory помещаются инструкции, относящиеся к определенному каталогу на диске, в секции Location - относящиеся к виртуальному пути, в секции Files - относящиеся к файлу или группе файлов.
<Directory /www/rmt.ru>
# директивы, относящиеся ко всем документам, хранящимся в каталоге /www/rmt.ru и вложенных в него
</Directory>
<Location /cgi-bin>
# директивы, относящиеся ко всем документам, доступным по адресу http://<имя_сервера>/cgi-bin/ <путь_к_файлу>
</Location>
<Files /www/rmt.ru/form.html>
# директивы, относящиеся к файлу form.html из каталога /www/rmt.ru
</Files>
Различие между секциями Directory и Location состоит в том, что первая относится к каталогам на диске, вторая - к виртуальному пути (URL), который браузер запрашивает у Web-сервера. И в той, и в другой могут присутствовать директивы order, allow и deny, которые позволяют ограничить доступ к каталогу или URL с различных машин.
Следующие две директивы относятся к секции <Directory>.
Options [options ...]
Возможные значения параметров:
ExecCGI - разрешить выполнение CGI-сценариев в данном каталоге и его поддереве;
FollowSymLinks - разрешить переходы по символическим ссылкам (создаваемым командой ln);
Includes - разрешить SSI (Server Side Includes);
Indexes - разрешить выдачу листинга каталога, если в нем нет файла index.html (или файла индекса, заданного директивой DirectoryIndex);
MultiViews - разрешить поддержку многих языков; по умолчанию она отключена, и включать ее, как правило, не нужно; поддержка перекодирования "на лету" для русского языка устанавливается с помощью других директив, которые мы рассмотрим позже;
All - установить сразу все перечисленные режимы кроме MultiViews.
При отсутствии специальных требований к безопасности вполне допустимо указать "Options All" в секции <Directory /www>; в противном случае нужно описать параметры каждого каталога отдельно.
AllowOverride [options ...]
Большинство директив могут задаваться не только в конфигурационных файлах сервера, но и в файлах .htaccess в каталогах сервера. Директива AllowOverride определяет набор директив, допустимых в файлах .htaccess. Параметры могут быть указаны следующие:
AuthConfig - разрешить установку авторизации по имени пользователя и паролю;
FileInfo - разрешить директивы, отвечающие за типы документов;
Indexes - разрешить директивы, связанные с листингом каталогов;
Limit - разрешить команды allow и deny, которые ограничивают доступ к файлам в зависимости от адреса клиентского компьютера;
Options - разрешить описанную выше директиву Options.
Учтите, что при включении последнего режима пользователи получают возможность создавать собственные файлы .htaccess и разрешать в них выполнение CGI-сценариев. Поэтому если нужно контролировать CGI-сценарии пользователей, не следует распространять на пользовательские каталоги действие директивы AllowOverride Options.
Однако во многих случаях (в частности, когда права на изменение содержимого сервера есть только у администратора) файл access.conf может выглядеть так, как в листинге 1.
Файл srm.conf
Файл srm.conf содержит директивы, связанные с общими настройками структуры каталогов сервера. Как правило, в нем достаточно изменить лишь несколько строк.
DocumentRoot <первый каталог сервера>
Путь к каталогу по умолчанию, индексный файл которого пользователь получит при обращении к серверу (http://<имя_сервера>/). Эту директиву следует задать и для каждого из виртуальных серверов (в секции <VirtualHost> файла httpd.conf).
UserDir <имя пользовательского каталога>
Каталог, в котором пользователи должны размещать свои файлы, чтобы они были доступны по адресу http://<имя_сервера>/~<имя_пользователя>/. Стандартно public_html. Иногда, чтобы облегчить жизнь пользователям, администраторы дают директиву "UserDir www".
DirectoryIndex <список файлов индекса>
Файл индекса - это тот файл, который будет передан клиенту при обращении к каталогу. Если указать несколько имен, сервер будет искать подходящий файл "слева направо". По умолчанию список содержит всего одно имя - index.html, но принято добавлять в него и другие распространенные имена индексных файлов. Например, директива может иметь вид: DirectoryIndex .index.html index.html index.htm index.cgi index.shtml home.html home.htm default htm default html
Чтобы включить на сервере поддержку CGI-сценариев, следует убрать знак комментария перед директивами ScriptAlias и AddHandler cgi-script .cgi. Первая задает каталог на диске, в котором будут храниться исполняемые программы, а вторая определяет, что все файлы с расширением .cgi должны обрабатываться как сценарии.
Директива ErrorDocument позволяет заменять стандартные сообщения сервера об ошибках на свои. Например, в случае самой распространенной ошибки - 404 (файл не найден) - считается хорошим тоном выдавать пользователю страницу с предложением продолжить свой путь по серверу или форму для поиска по узлу. Реализуется это достаточно просто: в настройках сервера мы убираем знак комментария со строки
ErrorDocument 404 /missing.html
B корневом каталоге каждого виртуального сервера создаем файл missing.html. Рекомендуется дать в нем ссылки на основные разделы сервера - и для удобства пользователей, и для того, чтобы предоставить необходимую информацию поисковым роботам, индексирующим серверы.
Файл httpd.conf
Конфигурационный файл httpd.conf является основным и содержит настройки, связанные с работой Web-сервера, виртуальных серверов, а также всех его программных модулей. Кроме того, именно в нем настраивается перекодирование русских букв при передаче от сервера к клиенту и обратно.
Директива Port, помещенная в самом начале файла, определяет номер порта для http-сервера; по умолчанию это 80. При необходимости можно приписать серверу другой порт или несколько портов, для чего служит директива Listen.
Директива HostnameLookups с параметром on или off включает или, соответственно, отключает преобразование численных IP-адресов клиентов, получивших документы с сервера, в доменные имена. Такое преобразование несколько замедляет работу сервера, но при числе посещений менее 10 000 в сутки это, как правило, практически не заметно.
Директивы User и Group задают пользователя, который будет администрировать сервер. С точки зрения безопасности нежелательно указывать здесь существующего пользователя, имеющего доступ к каким-либо другим ресурсам или файлам. Лучше создать отдельного пользователя и группу специально для http-сервера, например:
User www
Group www
Директивы ServerRoot, ErrorLog, CustomLog определяют соответственно корневой каталог http-сервера, путь к журналу регистрации ошибок (error_log) и путь к общему журналу обращений к серверу (access_log).
Директива CacheNegotiatedDocs разрешает кэширование документов, полученных с сервера. По умолчанию этот режим отключен, но, поскольку пропускная способность отечественных Internet-каналов еще долго будет оставлять желать лучшего, хорошо бы его включить: тогда пользователю не придется ждать загрузки картинок при каждом обращении к вашей странице.
Настройка виртуальных серверов в файле httpd.conf
В большинстве случаев один http-сервер способен обрабатывать запросы, поступающие на различные, так называемые виртуальные, Web-серверы. Виртуальные серверы могут иметь как один и тот же IP-адрес, но разные доменные имена, так и разные IP-адреса. С точки зрения пользователя второй вариант чуть более предпочтителен, поскольку запрос к серверу, отличающемуся от основного только доменным именем, должен содержать его имя, а некоторые старые браузеры, не поддерживающие протокол HTTP/1.1 (например, Microsoft Internet Explorer 2.0), не включают в запрос эту информацию. Однако такие браузеры выходят из употребления (сейчас их уже менее 0,5% общего числа); с другой стороны, выделение собственного IP-адреса каждому виртуальному серверу может быть неоправданной растратой адресного пространства компании.
Для описания адресов и доменных имен виртуальных серверов служат директивы ServerName, ServerAlias, NameVirtualHost и VirtualHost. Они необходимы, только если вам нужно установить более одного виртуального сервера.
В листинге 2 приведен фрагмент конфигурационного файла для случая виртуальных серверов с различными IP-адресами, в листинге 3 - аналогичный фрагмент для случая, когда серверы различаются только доменным именем.
Директива ServerName, находящаяся вне секций VirtualHost, определяет имя основного сервера, т. е. сервера, корневой каталог которого задан директивой DocumentRoot в файле srm.conf. Виртуальные серверы наследуют настройки основного; при необходимости специальной настройки соответствующие директивы помещаются в секции VirtualHost, относящейся к данному серверу. Допустимы любые директивы, которые могут встретиться в файлах httpd.conf и srm.conf, например DocumentRoot, ErrorLog, CustomLog, Location, ServerAdmin.
Из листинга 3 видно, как используется директива ServerAlias, если необходимо создать несколько виртуальных серверов с одинаковым содержанием. После того как вы занесете в конфигурационные файлы информацию об имеющихся на диске виртуальных серверах (разумеется, они должны быть описаны и в конфигурационных файлах DNS), можно приступить к последнему шагу настройки Apache-RUS.
Настройка перекодирования русскоязычных документов
Модуль поддержки русских кодировок был разработан в 1996 г. Дмитрием Крюковым (dvk@stack.net), а с февраля 1997 г. поддерживается рабочей группой Apache-RUS Team во главе с Алексеем Тутубалиным (lexa@ lexa.ru). За время своего развития модуль претерпел множество изменений и теперь обладает практически неограниченными возможностями настройки для любой конкретной конфигурации.
Инструкции, отвечающие за перекодирование, разделяются естественным образом на три группы. К первой относятся две директивы, указывающие, в какой кодировке хранятся файлы на диске: CharsetSourceEnc <кодировка> и CharsetByExtension <кодировка> <расширение1> <расширение2>...
Например, файл httpd.conf может содержать строки:
CharsetSourceEnc koi8-r
CharsetByExtension windows-1251 .txt
Такая запись означает, что все файлы хранятся на диске в кодировке koi8-r; исключение составляют текстовые файлы с расширением txt, для которых используется Windows-1251.
Если кодировок более одной и документы в каждой кодировке хранятся в своем каталоге, директивы CharsetSourceEnc помещаются в соответствующие секции <Location> либо в файлы .htaccsess внутри каталогов.
Вторую группу составляют директивы CharsetDecl, CharsetAlias CharsetRecodeTable и CharsetWideRecode Table, которые определяют названия кодировок, их синонимы и таблицы перекодирования. Все они размещаются в секции <IfModule mod_charset.c> - </IfModule> и в большинстве случаев не нуждаются в изменении.
В третью, самую многочисленную группу входят директивы, задающие порядок перекодирования символов от сервера клиенту и обратно.
Принято, чтобы при попадании на русскоязычный сервер пользователь получал страницу в "своей" кодировке, определяемой автоматически на основе той информации об операционной системе, которую передает серверу браузер: например, установив, что пользователь работает в Windows, сервер выдает ему страницу в кодировке Windows-1251, а установив, что он работает в Unix, выдает страницу в koi8. Если выбранная таким образом страница не подходит, клиент может сменить кодировку вручную. Основных схем выбора три: по префиксу каталога, по имени виртуального сервера и по номеру порта. У каждой из них есть свои преимущества и свои недостатки.
) http://www.rmt.ru/koi/document.html
http://www.rmt.ru/win/document.html - выбор кодировки по префиксу каталога,
2) http://koi.www.rmt.ru/document.html
http://win.www.rmt.ru/document.html - выбор кодировки по имени сервера,
3) http://www.rmt.ru:8000/document.html
http://www.rmt.ru:8001/document.html - выбор кодировки по порту.
Для организации выбора кодировки по префиксу каталога нужно либо внести в секцию VirtualHost строку вида
Alias /koi /www/rmt
либо создать в соответствующем каталоге символическую ссылку на себя:
# cd /www/rmt
# ln -s . koi
Усилия, затрачиваемые на первоначальное конфигурирование, невелики, но для крупных серверов с разветвленной структурой такая схема не очень подходит: вряд ли удастся проконтролировать корректность ссылок на разные страницы узла с внешних серверов, да и за внутренними ссылками проследить не так-то просто (в большинстве случаев они должны быть относительными).
При выборе кодировки по имени сервера необходимо, чтобы информация о соответствующих именах была задана в настройках DNS-сервера, обслуживающего данный домен, а в файл httpd.conf в секцию VirtualHost вносятся строки:
<VirtualHost 193.124.134.3>
ServerName www.rmt.ru
ServerAlias *.www.rmt.ru
...
</VirtualHost>
Если в качестве имени поддомена выступает один из синонимов названия кодировки (CharsetAlias), то эта кодировка считается кодировкой клиента. При таком подходе ссылки внутри сервера могут быть любыми, и единственный недостаток данной схемы в том, что перекодирование не выполняется для браузеров, не указывающих в запросе имя сервера, - впрочем, их, как уже говорилось, осталось крайне мало. Если же совместимость со старыми браузерами категорически необходима, можно назначить каждому поддомену свой IP-адрес.
Чтобы применить выбор по номеру порта, необходимо в файле httpd.conf удалить директиву Port и снять комментарии со строк
Listen 80
Listen 8100
Listen 8101
Listen 8102
Listen 8103
CharsetByPort koi8-r 8100
CharsetByPort windows-1251 8101
CharsetByPort ibm866 8102
CharsetByPort iso-8859-5 8103
Номера портов не очень важны. В стандартной настройке Apache-RUS нумерация, как видим, начинается с 8100, но чаще ее начинают с 8000 или 8080.
Данная схема не требует внесения дополнительных записей в DNS и позволяет работать с виртуальными серверами даже клиентам, которые не поддерживают протокол HTTP/1.1, - ведь кодировка выбирается исходя из числа, указывающего на номер порта Web-сервера (по умолчанию это 80). Однако сетевые брандмауэры иногда запрещают работу с определенными портами, и если таким брандмауэром защищена сеть клиента, он не сможет установить соединение с вашим сервером. К сожалению, подобная ситуация возникает чаще, чем хотелось бы.
Схема выбора кодировки задается директивой CharsetSelectionOrder. Ее параметры определяют порядок применения правил выбора. Так, выбору по префиксу каталога соответствует строка
CharsetSelectionOrder Dirprefix Useragent Portnumber Hostname UriHostname
Выбору по имени домена - строка
CharsetSelectionOrder Hostname UriHostname Useragent Portnumber Dirprefix
Для выбора по номеру порта следует записать
CharsetSelectionOrder Portnumber Useragent Hostname UriHostname Dirprefix
Замечания
Чтобы документы, кодировка которых была выбрана автоматически, не оседали в кэшах прокси-серверов, Apache-RUS дает им специальный HTTP-заголовок, запрещающий кэширование. В результате при возврате на страницу (например, по кнопке Back) она считывается с сервера заново, что, во-первых, замедляет работу, а во-вторых (и это более серьезная проблема) очищает все текстовые формы, которые были на странице (то же происходит при использовании JavaScript). Разрешить кэширование позволяет директива CharsetDisableForcedExpires On, которая задается в секции <Location> для данного виртуального пути или в соответствующем файле .htaccess, но тогда возникает риск, что пользователи иногда будут получать страницы в "чужой" кодировке. Существуют и промежуточные варианты: например, можно установить CharsetDisableForcedExpires On (в секции <Files>) только для тех документов, которые содержат формы, окна или JavaScript-сценарии.
Для полного отключения перекодирования в каталоге или на виртуальном сервере служит директива
Charset Disable On.
При выборе кодировки по имени сервера или по префиксу каталога хорошим тоном является использование для графических файлов абсолютных ссылок с указанием имени сервера (например, <img src="http://images.rmt.ru/ picture.jpg">). Тогда при переходе клиента от основного сервера к выбранной кодировке изображения будут браться из локального кэша браузера, а не перечитываться заново. Это особенно актуально при большом объеме графической информации на сервере.
Запуск сервера
По окончании процедуры настройки следует запустить httpd-сервер. Для этого нужно войти в систему с привилегиями пользователя root и дать команду
# /usr/local/apache/sbin/apachectl start
(начиная с версии 27.4 - # /usr/local/apache/bin/apachectl start)
Если в конфигурационных файлах есть серьезные ошибки, сервер не запустится, а на экран будет выведено соответствующее сообщение. В любом случае после запуска сервера имеет смысл просмотреть файлы error_log и access_log, которые находятся в каталоге logs. Для проверки работоспособности сервера достаточно создать в его корневом каталоге файл index.html и обратиться из браузера по адресу сервера. Правильную установку режимов перекодирования следует проверять с помощью браузеров для различных операционных систем. Не забудьте добавить Apache в список программ, запускаемых при старте системы. Успехов вам в пополнении русского Web-пространства!
Вверх к разделу статей "Установка"

 
Статья об установке PHP версии 3 взята из официального русского мануала, а об установке Апача написана Артемом Подстрешным.

outro
Вот и подошел к концу этот выпуск. Следующий предположительно выйдет в следующий понедельник, т.е. 29 декабря 2003 года. Над этим выпуском старался decoder (va4pk@knet.ru). Скоро откроется сайт http://webcoding.msk.ru/, откуда уже сейчас можно скачать некоторые доки. Пишите письма, что бы вы хотели видеть в этой рассылке и на сайте. До следующего понедельника.
Вверх

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное