Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Интернет технологии -> PHP -> Apache & PHP - удобные технологии


Apache & PHP - удобные технологии

Соединение Apache и PHP в заголовке данной статьи не случайно. Именно связка этих двух технологий на данный момент представляет собой наиболее удобное решение для небольших и средних по размеру сайтов. Обе программы разрабатываются на принципах OpenSource и совершенно бесплатны. Любой желающий может скорректировать код под свои нужды. Впрочем, в этом нет необходимости - обе программы развиваются уже достаточно давно и большинство нужных возможностей уже реализовано. Над каждой из программ работает большая группа профессиональных программистов, оперативно исправляющая ошибки и добавляющая поддержку новых технологий. Давайте скажем им спасибо и с благодарностью воспользуемся плодами их трудов.

Я не буду "сталкивать" технологии друг с другом, доказывая, что PHP лучше или, наоборот, хуже, чем ASP, mod_perl, ColdFusion и т.д. - этот вывод вы сделаете сами. У меня другая цель - ознакомить Вас с этими технологиями и показать на конкретных примерах, каким образом, используя связку Apache плюс PHP, можно решать типичные задачи, возникающие при создании динамических web-сайтов.

Для начала мы совершим экскурс в историю и проследим, каким путем шло развитие серверного программирования, а потом вернемся в день сегодняшний - попробуем установить на локальном компьютере версии Apache и PHP для Windows.


Часть I :::

С чего все началось?

Изначально разрабатываемый по лицензии GNU, Apache в настоящее время стал самым популярным сервером. Более 60% узлов, поставляющих информацию в интернет, используют в качестве web-сервера именно Apache. Открытость кода пошла ему на пользу, и на данный момент это один из самых надежных и непрерывно развивающихся web-серверов. Он поддерживает все самые современные технологии и позволяет расширять свои функции за счет подключения внешних модулей.

    Откуда взялось название Apache?


    Несмотря на столь явную ассоциацию, ничего общего с индейцами данное название не имеет. Оно трансформировалось из фразы "A PAtCHy server". Patch в переводе с английского - "заплатка", а в программировании - "дополнение к программе, исправляющее некоторые ошибки или изменяющее поведение программы". Первоначальный код web-сервера был написан на основе нескольких уже существующих фрагментов кода, к которым и были добавлены несколько патчей. Вот так и возникло уже хорошо известное название Apache.

Имея web-сервер, можно легко запустить небольшой статический сайт, но чтобы создать сложный, динамический сайт, требуется применение дополнительных технологий, которые позволяют строить системы с применением баз данных и осуществлять взаимодействие с пользователем. Еще на заре WWW был придуман протокол, позволяющий броузеру и серверу обмениваться информацией. Этот протокол называется CGI, Common Gateway Interface - общий шлюзовый интерфейс. Для его использования необходимо написать внешнюю программу, призванную осуществлять всю необходимую логику. Сам же стандарт CGI описывает только механизм, при помощи которого web-сервер сможет запустить внешнюю программу, и получив от нее ответ, отправить его обратно броузеру.

Так выглядит заглавная страничка сайта http://httpd.apache.org/
В качестве языка программирования для написания CGI-программ может быть использован практически любой, но наибольшее распространение получил Perl. Благодаря его интерпретируемости скорость разработки и отладки на нем были гораздо выше, чем, к примеру, на C. Разумеется, это сказывалось на скорости выполнения программ, но для небольших скриптов, которые применяются на web-сайтах, это не было критичным.

При формировании сложной динамической странички (а она, как правило, состоит из нескольких фрагментов) необходим механизм, который позволяет встраивать результат работы внешней программы в код странички. Первой технологией, позволяющей осуществлять предварительную обработку кода странички на сервере, была SSI, Server Side Includes - включения на стороне сервера. Название прозрачное, не правда ли?

Страничка, разрабатываемая с применением этой технологии, использовала внутри своего кода специальные SSI-теги, которые web-сервер заменял на реальные данные непосредственно перед выдачей их броузеру. Для того чтобы сервер легко находил такие вставки, они предварялись специальной конструкцией:

<!--#command param -->

Как вы, наверное, заметили, серверный код помещался внутри HTML-комментария, так что даже в случае ошибки броузер получал корректный код и не обрабатывал команды сервера, принимая их за обычный комментарий. Впоследствии способ внедрения серверных команд прямо в HTML-код странички стал общепринятым, хотя и различающимся в разных технологиях. К примеру, ASP использует конструкцию <% %>, а PHP, к рассмотрению которого мы перейдем чуть позже, - <? ?>. Как видите, в процессе эволюции отказались от помещения команд внутри html-комментария - разумно рассудив, что в сложных страничках невозможность обработки серверных тегов не спасет положение и пользователь все равно не сможет увидеть адекватную по смыслу страничку.

Стандарт SSI определял всего несколько серверных команд и, по сути, позволял делать лишь простейшие операции: вставку фрагмента кода из внешнего файла, определение переменных и их обработку в простейших условиях сравнения. Но главное - SSI позволял запускать внешнюю программу и вставлять результат в код страницы. Внешней программой чаще всего служил скрипт, написанный на Perl. Таким образом, весь процесс создания сложного сайта делился на две части - написание HTML-кода страничек с нужными SSI-вставками и написание логики программы, в том числе и для доступа к базам данных при помощи внешнего языка программирования.

Так выглядит первая страничка официального сайта разработчиков PHP
Запуск нужной программы брал на себя Apache. Но как определить, что данная страничка является не обычной, а требует предварительной обработки сервером? Для этого в конфигурации сервера прописывается новое расширение и ему назначается соответствующий обработчик. Для сайтов, использующих SSI, практически стандартным стало расширение .shtml, и, встречая его, Apache уже понимает, что от него требуется. Справедливости ради стоит сказать, что расширение у странички может быть любым и его легко изменить в настройках сервера. А для страничек, использующих PHP, определен аж целый букет стандартных расширений - .php, .php3, php4, .phtml.

PHP является следующей после SSI ступенью и имеет на порядок больше возможностей. Новая технология совместила в себе гибкость SSI (позволив встраивать серверный код в HTML), и удобный синтаксис команд (расширив его до полноценного языка программирования, представляющего собой нечто среднее между C и Perl). Если поставить вопрос ребром и спросить: существует ли что-нибудь невозможное для осуществления в связке SSI+Perl, то ответ будет отрицательным - практически обе технологии позволяют сделать что угодно. В чем же тогда преимущества PHP? Я бы сказал, что они заключаются в скорости разработки и большом наборе функций, оптимизированных специально для создания web-сайтов. А кроме того, в механизме удобной отладки, выводящем сообщения об ошибках прямо в окно броузера.

    История возникновения PHP


    Началось это все, по меркам интернета, достаточно давно, а точнее - в 1994 году, когда Расмус Лердорф написал на Perl небольшую оболочку для отслеживания читателей своего резюме, расположенного на одном из сильно загруженных web-серверов. Именно это обстоятельство (я имею в виду загруженность) привело к тому, что Расмус переписал свои скрипты на языке C. Это позволило избавиться от затрат на запуск копии Perl при каждом обращении к страничке. Через некоторое время другие пользователи, также размещавшие свои резюме на этом сервере, обратили внимание на сценарии Расмуса и испросили разрешение на их использование.

    Постепенно, как это всегда и бывает, пользователи стали присылать свои пожелания по расширению функций программы и включению в нее новых возможностей. В конце-концов Расмус Лердорф собрал дистрибутив, состоящий из исходных скриптов с добавлением новых функций, набора документации и FAQ-листа. Так родилась на свет версия PHP 1.0 (тогда, правда, нумерации еще не было). В то время PHP расшифровывалось как Personal Home Page, т.е. - набор скриптов для создания домашней странички. Впоследствии эта аббревиатура стала расшифровываться как PHP Hypertext Preprocessor (вот такое рекурсивное определение, подобное Linux - Linux Is Not UniX)

    Спустя некоторое время возможности скриптов были значительно расширены. Был написан процессор сценариев, добавлены средства для обработки HTML-форм и возможность включения SQL-запросов прямо в текст странички. Модуль обработки форм был назван FI (Form Interpreter), новая версия получила название PHP/FI, а позднее - просто PHP2. Это произошло в середине 1995 года.

    Постепенно задачи, возлагаемые на PHP, стали более сложными. Потребовалась полная переработка программы с целью повышения быстродействия и обеспечения более широкого набора возможностей. Так был запущен проект PHP3, и на этот раз за его разработку взялась уже целая команда во главе с Расмусом Лердорфом. Из важных нововведений можно отметить то, что синтаксис сценариев PHP был приведен к более стандартному виду и добавился API, позволяющий независимым разработчикам расширять возможности программы. С тех пор PHP стремительно развивается, завоевывая все большее количество поклонников. На данный момент вышла уже 4-я версия PHP, но по-прежнему широко используется и более младшая версия - PHP3.

Если вас заинтересовала эта статья, то, вы, вероятно, ищете технологию, которая позволит вам решить свои задачи. Наверняка рассматриваете и оцениваете разные варианты. Учиться и изучать новые технологии лучше всего на практике, а потому давайте попробуем поставить Apache и PHP на Ваш компьютер и разобраться со всеми проблемами, которые ждут нас на этом пути. И для изучения мы поставим их под Windows. Да-да, не удивляйтесь - открытость разработок обеих систем позволила создать их версии для большого количества операционных систем. В том числе и для Windows.

Честно говоря, советуя поставить Apache и PHP под Windows, я преследую и несколько иные цели: показать, что локальный web-сервер очень удобен для разработки и тестирования сайтов именно на платформе Windows. А уже отлаженный код можно переносить на целевую операционную систему. Причем, благодаря тому, что обе программы прекрасно работают на разных платформах, можно уже говорить о кросс-платформенной переносимости кода - о том, чего так не хватает ASP. Да, я знаю, что существуют программы, позволяющие использовать ASP на UNIX-серверах, но следует признать, что эта технология очень сильно связана с платформой Windows, и поэтому текущие версии для других операционных систем позволяют использовать лишь базовые возможности этой технологии.

Все же, рассказывая об оптимальной установке, я буду все время подразумевать, что основной операционной системой, на которой работает связка Apache+PHP, является один из клонов UNIX (обычно Linux).


Часть II :::

Установка Apache под Windows

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

В последнее время Apache поставляется в новом формате дистрибутивов от Microsoft - .msi (Microsoft Installer), и если у вас стоит версия Windows, отличная от WinMe или Win2000, то вам дополнительно придется скачать и установить программу-распаковщик (необходимые ссылки также есть в конце статьи). Для начала процесса инсталляции достаточно запустить msi-файл.

Перед началом установки инсталлятор попросит Вас ввести несколько дополнительных сведений, и первое, что он спросит, - это название домена, сервера и электронного адреса администратора. В нашем случае значения этих переменных не принципиальны - мы ведь ставим сервер для локальной отладки динамических сайтов, а потому можем присвоить им любые значения. Впоследствии их можно будет легко подредактировать в настройках web-сервера. В данном случае они понадобились инсталлятору для того, чтобы он смог сгенерировать работоспособный конфигурационный файл для запуска Apache. Посмотрите на скриншот с изображением диалога установки - здесь я выбрал в качестве имени домена и имени сервера слово "apache", а в качестве электронного адреса yourname@domain.com. По желанию вы можете заменить электронный адрес на свой.

Диалог выбора каталога для установки Apache
Немного отвлечемся и поговорим о том, куда лучше всего установить Apache. Стандартное расположение "С:\Program Files\" в данном случае будет не очень удобным, и вот почему. Устанавливая web-сервер на своем локальном компьютере, мы все же подразумеваем, что работать он будет у провайдера под UNIX-системой, а значит, нам лучше всего и у себя построить как можно более близкую к web-серверу провайдера конфигурацию. Впоследствии это позволит избежать ненужных проблем с изменением путей в CGI-программах и HTML-формах. Стандартным каталогом для Apache в UNIX-системах является "/usr/local/apache/". Так что давайте и мы разместим Apache по такому же адресу. Диск для установки можете использовать любой, но я буду рассказывать, предполагая, что это будет диск c:

c:\usr\local\apache\

Дополнительно инсталлятор спросит у вас, каким образом ставить Apache - как одиночное приложение или как сервис. Последнее имеет смысл только при установке программы под WinNT или Win2000. Исходя из того, что большинство использует в качестве основной системы Win95/98/ME, я рекомендую выбрать способ ручного запуска web-сервера (он выделен на рисунке). Те, кто использует систему на основе Windows NT, могут выбирать любой способ, но если вы не уверены в том, какой из них предпочесть, то остановите свой выбор на ручном запуске.

Удобно, что Apache ставит все нужные программы исключительно в свой каталог и его не нужно каждый раз устанавливать заново при очередной переустановке операционной системы. Если вы в точности следовали моим указаниям, то можете попробовать запустить Apache, воспользовавшись ярлыком в меню "Пуск", который любезно сгенерировал инсталлятор. К сожалению, в новой версии сервера теперь генерируется только ярлык для запуска Apache, но не для его остановки. Дело в том, что запуская Apache как консольное приложение, нам необходимо точно также, то есть в консоли, давать команду и на остановку web-сервера. В противном случае есть вероятность некорректного завершения программы, что может повлечь за собой порчу файлов. Поэтому давайте подробнее остановимся на вопросе корректного запуска и остановки Apache.

Для запуска Apache достаточно просто дважды щелкнуть на запускаемом файле Apache.exe, а вот для того, чтобы его остановить, необходимо набрать в командной строке следующую строчку:

c:\usr\local\apache\apache.exe -k shutdown

Если вы решите проделать эту вручную, вам придется запустить еще одну копию command.com, в которой вы введете вышеприведенную команду. Согласитесь, что каждый раз проделывать это достаточно неудобно, а потому мы слегка автоматизируем этот процесс. Есть два способа. Первый - создать два ярлыка к файлу Apache и указать в настройках нужные параметры для запуска и остановки Apache, а второй - написать два bat-файла следующего содержания:

1) start.bat

c:\usr\local\apache\apache.exe

2) shutdown.bat

c:\usr\local\apache\apache.exe -k shutdown

и разместить их, например, в каталоге с:\usr\local\. Этот способ кажется копией предыдущего, но на самом деле он более удобен, поскольку в будущем нам может понадобиться запускать вместе с Apache и другие программы (например, базу данных MySQL), а наличие пакетных файлов позволит нам легко добавить строчку, запускающую такие программы. Для удобства пользования я бы рекомендовал создать и разместить на рабочем столе ярлычки на два этих файла.

После запуска Apache сверните консольное окно на панель задач и больше не отвлекайтесь на него - оно должно быть активным в течение всего сеанса работы с сервером. Теперь запустите свой любимый броузер и в адресной строке наберите:

http://localhost/

или

http://127.0.0.1/

Эти два варианта равноправны и должны работать оба. Если сервер функционирует как положено, то в окне броузера будет выведена первая страничка с документацией по Apache. Теоретически можно уже сейчас пробовать писать странички, размещать их в каталоге c:\usr\local\apache\htdocs\ и смотреть результат в броузере. Практически же это не совсем удобно, поэтому переходим к более тонкой настройке Apache.


Часть III :::

Конфигурирование Apache: базовые директивы

Есть два способа настройки web-сервера: изменить переменные, отвечающие за функционирование основного сервера, или создать виртуальный сервер. В нашем случае второй способ предпочтительнее. Но об этом немного позже, а пока разберемся с базовыми директивами, управляющими поведением сервера. Основная конфигурация Apache заключена в файле httpd.conf, расположенном в каталоге:

c:\usr\local\apache\conf\

Это обычный текстовый файл, и для его редактирования подойдет любой текстовый редактор - тот же "Блокнот", к примеру. Я не буду подробно рассказывать о каждой строчке в этом файле, а лишь о самых необходимых и нужных нам директивах. Отметьте, что знак '#' является комментарием, и если вы хорошо читаете по-английски, то без труда сможете их разобрать, что, правда, не очень поможет, если у вас нет хотя бы общего представления о принципах функционирования web-серверов и об интернет в целом. А потому, позвольте мне предоставить Вам свою помощь в настройке Apache. Вместе у нас получится быстрее и, что самое важное - правильно.

Файл конфигурации Apache состоит из 3-х больших секций:

  • Global Environment - директивы, управляющие настройками Apache в целом;
  • Main server configuration - директивы, управляющие настройками главного сервера;
  • Virtual Hosts - директивы, управляющие виртуальными серверами.

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

ServerName - имя запущенного web-сервера. Оно возвращается клиенту в HTTP-заголовке и идентифицирует web-сервер, выполнивший запрос. При реальной работе сервера в интернете имя должно уже существовать и быть прописанным в DNS. При локальной установке web-сервера для отладки и тестирования сайтов это не принципиально - имя может быть любым. Кстати, именно это имя запрашивал инсталлятор перед установкой, так что, если желаете, можете сейчас его отредактировать. Значение параметра должно быть определено как минимум для главного сервера. В противном случае Apache просто не запустится.

ServerAdmin yourname@domain.com - электронный адрес администратора, используемый в некоторых автоматически генерируемых сообщениях об ошибках web-сервера, таких как отсутствие странички, к примеру. Параметр должен быть определен как минимум для главного сервера, иначе Apache также откажется запускаться.

ServerRoot "c:/usr/local/apache" - каталог, в котором был размещен Apache при установке. Если вы пожелаете переместить его в другое место, то данную строчку нужно будет скорректировать, как, впрочем, и все остальные строчки в файле, указывающие на данный каталог. Если вы установили Apache так, как я описывал выше, то данная строчка уже будет сконфигурирована верно и станет указывать на c:/usr/local/apache.

Port 80 - порт, по которому Apache будет отслеживать HTTP-запросы. По умолчанию он равен стандартному значению для web-серверов, и у Вас вряд ли возникнет необходимость в его изменении.

DocumentRoot "с:/usr/local/apache/htdocs" - адрес каталога, используемого для хранения HTML-страничек. По умолчанию данный параметр указывает на документацию Apache, поставляемую в дистрибутиве и расположенную в вышеуказанном каталоге.

UserDir "c:/usr/local/apache/users/" - каталог, используемый для хранения страничек пользователей, доступ к которым будет возможен по адресу:

http://www.domain.com/~user/

Поскольку мы ставим web-сервер для локальной отладки сайтов, а не для реальной работы в интернете, то, данную строчку вам менять не нужно.

DirectoryIndex index.html index.htm - параметр, определяющий имя файла, который будет искать Apache, если указан не полный URL. То есть такой, который заканчивается именем каталога, а не адресом конкретной странички. В том числе это относится и к файлу, который открывается по умолчанию при наборе основного URL. Например, если вы набрали в адресной строке:

http://www.domain.com/links/, 

то на самом деле Apache откроет страничку:

http://www.domain.com/links/index.htm

Полный список файлов, которые будут искаться в директории, как раз и определяется этим параметром. Имена файлов отделяются друг от друга пробелом. При этом имеет значение порядок, в котором перечислены альтернативные имена: если в каталоге есть файлы с именем и index.htm, и index.html, то Apache откроет именно вторую страничку, поскольку в списке index.html стоит раньше, чем index.htm.

Alias /icons/ "c:/usr/local/apache/icons/" - команда создания алиасов, то есть ссылок, для любых каталогов. Например, вышеприведенная команда делает доступным содержимое каталога c:/usr/local/apache/icons/" по адресу:

http://www.domain.com/icons/

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

ScriptAlias /cgi-bin/ "c:/usr/local/apache/cgi-bin/" - данная команда аналогична предыдущей с той лишь разницей, что определяет реальное местоположение каталога с выполняемыми CGI-скриптами.

AddType text/html .html .htm - команда, определяющая тип mime для файла с заданным расширением. В данном случае мы присваиваем расширениям .html и .htm тип обычного гипертекста, и Apache будет интерпретировать его как html-код. Точнее, интерпретировать-то придется броузеру - web-сервер лишь выдаст ему указание о том, что это гипертекст. А вот если этой строчки не будет, то Apache выдаст странички с таким расширением за обычные текстовые файлы.

AddHandler server-parsed .shtml - команда, определяющая обработчик (автоматически запускаемую программу) для файла с указанным расширением. В данном случае мы связываем расширение .shtml со встроенным обработчиком SSI-директив. И, следовательно, все файлы, имеющее данное расширение, перед выдачей пользователю, будут проходить предварительную обработку. Если говорить более конкретно, то Apache заменит все SSI-вставки на соответствующие им значения.

ErrorDocument 404 /error404.html - директива, определяющая страничку, которая будет отослана пользователю при возникновении ошибки. В данном случае была определена страничка для самой распространенной 404-ой ошибки. Данная директива не обязательна, и в случае ее отсутствия Apache сгенерирует стандартную страничку. Но согласитесь, что определить свою собственную страничку ошибки и, кроме того, сделать ее в едином стиле сайта, гораздо привлекательнее. Путь к страничке ошибки может быть указан либо локально (тогда он должен обязательно начинаться от корня сайта), либо указанием полного URL-странички.

ErrorLog logs/error.log - команда, определяющая имя файла, куда будут записываться все ошибки, возникающие при загрузке страничек или выполнении CGI-скриптов. При локальной отладке web-сайтов - вещь крайне полезная. Так что если что-либо не ладится - Apache не запускается, Perl-скрипты не работают, графика на страничках не грузится, - этот файл может помочь вам разобраться в проблеме.

CustomLog logs/access.log common - директива, аналогичная предыдущей, но с тем отличием, что используется для протоколирования всех запросов к web-серверу. На основе его анализа можно получить полный отчет по посещаемости сайта и популярности отдельных разделов.


Часть IV :::

Конфигурирование Apache: настройка прав доступа к файлам и каталогам

Из соображений безопасности нам необходимо для любого файла или каталога, используемого для хранения страничек или CGI-программ, установить определенный набор прав. Но вначале рассмотрим, каким же образом нам задать папку или файл(ы), которым мы присваиваем права. Делается это при помощи одной из следующих конструкций:

Для каталога:

<Directory directory>
   Здесь перечисляются все директивы, управляющие доступом и опциями каталога
</Directory>

Для файла(ов):

<Files filename>
   Здесь перечисляются все директивы, управляющие доступом к файлу(ам)
</Files>

Вместо directory и filename подставляются нужные значения. Возможно использование регулярных выражений, что позволяет задавать права для целой группы файлов и/или каталогов.

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

Важно отметить, что конфигурирование поведения web-сервера при помощи .htaccess возможно только в случае, если это разрешено в правах вышестоящего каталога. Но об этом я еще скажу, когда мы дойдем до соответствующей команды. А пока начнем разбирать по порядку все основные директивы, используемые для определения прав:

Options option_list - директива, определяющая дополнительные опции для конкретного каталога. Опции отделяются друг от друга пробелами. Основные из них следующие:

  • None - дополнительные опции для данного каталога не определены
  • All - определены все возможные опции, за исключением MultiViews
  • Indexes - опция, позволяющая использовать файлы по умолчанию - при неполном наборе адреса. Список файлов по умолчанию задаются директивой DirectoryIndex, которая была описана в этой статье несколько выше. При отсутствии в данном каталоге файла по умолчанию Apache выдаст броузеру содержимое каталога.
  • Includes - опция, относящаяся к функционированию SSI и разрешающая использовать директиву Include. Для полноценного функционирования SSI опция должна быть включена.
  • IncludesNOEXEC - опция, подобная предыдущей, но запрещающая использовать во включениях SSI-команды запуска CGI-скрипта <!--#exec script.pl --> и <!--#include script.pl -->
  • ExecCGI - опция, разрешающая в данном каталоге запуск CGI-программ.
  • FollowSymLinks - опция, позволяющая Apache переходить по символьным ссылкам в системах Unix. То есть страничка может находиться вне основного дерева, определенного для хранения html-документов.

AllowOverride - директива, разрешающая переопределять параметры доступа для нижележащих каталогов. То, о чем я говорил ранее. После данной команды должен быть указан список директив, разрешенных к переопределению. Например, AllowOverride All - разрешает переопределение любых прав, AllowOverride Options - разрешает переопределение опций для каталога, AllowOverride None - запрещает переопределение прав.

Order allow, deny - порядок наложения прав доступа к файлу или каталогу с определенных IP-адресов или доменных имен. Может использоваться маска для отсеивания целых сегментов сети. В данном случае вначале определяются сайты, доступ к которым разрешен, а потом те, к которым запрещен. В случае команды Order deny, allow - все наоборот.

Allow from - список IP-адресов или доменных имен, доступ с которых разрешен. Может быть использована маска - для разрешения доступа к сайту целой группе доменов. Например, Allow from .com - разрешает доступ со всех доменов, имеющих окончание .com. Allow from all - разрешает доступ к сайту из любой точки интернета.

Deny from - список IP-адресов или доменных имен, доступ с которых запрещен. Так же, как и в предыдущем случае, может быть указана группа доменов или маска IP-адресов.

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


Часть V :::

Конфигурирование Apache: настройка нашей копии программы

Теперь, когда Apache сконфигурирован и запущен в базовой конфигурации, а мы вооружены знаниями об основных директивах, нам не мешает добавить поддержку других технологий - в частности SSI. Если вы внимательно читали описание команд по конфигурированию Apache, то уже наверняка догадались, что технология SSI включается указанием следующих двух директив:

AddType text/html .shtml
AddHandler server-parsed .shtml

Добавьте в секцию "Document type" файла конфигурации две эти строчки (или просто раскомментируйте их) и скорректируйте список файлов по умолчанию, добавив туда имя index.shtml:

DirectoryIndex index.htm index.html index.shtml

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

<Directory />
  Options Indexes Includes
  AllowOverride All
</Directory>

Больше для поддержки технологии SSI ничего не требуется, так что перейдем к конфигурированию виртуального сервера.

Настройка виртуального сервера


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

Но перед тем как конфигурировать виртуальный сервер, давайте создадим все необходимые каталоги. Я рекомендую для интернет-проектов использовать структуру каталогов, представленную ниже. Вы можете в качестве основного выбрать любой другой диск, но я для объяснений по-прежнему буду использовать диск с:.

c:\web\ - каталог, используемый для интернет-проектов;
c:\web\project\ - каталог для нашего проекта, который мы так и назовем - project;
c:\web\project\website\ - здесь будут размещены странички сайта;
c:\web\project\cgi-bin\ - здесь могут размещаться CGI-скрипты на Perl;
c:\web\project\logs\ - ну, а этот каталог будет содержать лог-файлы web-сервера.

Как уже было сказано выше, директивы, определенные в секции виртуального хоста, переопределяют глобальные значения. Но для начала нужно разобраться, каким образом определить сам виртуальный хост. Это делается при помощи одноименной директивы VirtualHost. Ниже приведен фрагмент, описывающий виртуальный сервер для нашего проекта. Добавьте его в самый конец конфигурационного файла - именно там находится секция для определения виртуальных хостов. А затем я дам подробные разъяснения по каждой строчке:

<VirtualHost 127.0.0.2>
  ServerAdmin yourmail@domain.com
  ServerName project
  DocumentRoot "c:/web/project/website"
  ScriptAlias /cgi-bin/ "c:/web/project/cgi-bin/"
  ErrorLog c:/web/project/logs/error.log
  CustomLog c:/web/project/logs/access.log common
</VirtualHost>

Сделали? Прекрасно, переходим к комментариям! Итак, в первой строчке я определил IP-адрес, по которому будет осуществляться доступ к виртуальному хосту. Поскольку локальный web-сервер привязан к IP-адресу 127.0.0.1, то логично для виртуальных хостов воспользоваться следующими по порядку IP-адресами: 127.0.0.2, 127.0.0.3, 127.0.0.4 и т.д.

Во второй и третьей строчках переопределены e-mail администратора и имя сервера. Эти директивы указывать не обязательно, но они позволяют нам более удобно организовать работу с web-сервером, в частности, сделать так, чтобы обращаться к серверу можно было не по IP-адресу, а по определенному в этой секции имени хоста, но об этом я расскажу чуть позже.

Далее следует важная строчка, определяющая местоположения документов для нашего сайта. Формат записи полностью аналогичен базовому серверу. Точно так же переопределены алиасы к CGI-скриптам и пути к лог-файлам. Заметьте, что в качестве значений мы использовали каталоги, которые создали несколькими абзацами выше.

После добавления виртуального хоста Apache необходимо перезапустить - чтобы изменения вступили в силу. Наш виртуальный хост теперь будет доступен по адресу 127.0.0.2. Если что-то не получается и сервер отказывается запускаться, то посмотрите, что написано в файле error.log. Скорее всего, там будет указано на ошибку в синтаксисе конфигурационного файла.

Помните, я обещал рассказать о том, каким образом сделать так, чтобы можно было обращаться к сайту еще и по имени? Вот и настало время. В конфигурации web-сервера нам уже ничего менять не нужно, а придется подправить внутренний файл Windows, определяющий соответствие локальных IP-адресов и доменных имен. В зависимости от того, в какой системе вы работаете, этот файл может находиться в разных местах или не существовать вовсе (в этом случае его нужно будет создать вручную). Файл называется hosts и расположен в каталоге:

1) для машин с сиcтемой Win9x/ME:

c:\windows\

2) для машин с системой WinNT/2000:

c:\windows\system32\driver\etc\

В этом каталоге также может находиться файл hosts.sam (расширение от слова "sample" - пример), который можно переименовать в hosts, если последний отсутствует. Файл hosts является обычным текстовым файлом в формате ASCII и имеет очень простой синтаксис: каждая строчка состоит из локального IP-адреса и соответствующего ему доменного имени. Для нашего случая данный файл должен выглядеть следующим образом:

127.0.0.1       localhost apache
127.0.0.2       project

Заметьте, что в первый строчке я определил два имени для одного IP-адреса. Обращение к такому серверу возможно по любому из этих имен. Альтернативные имена должны отделяться друг от друга пробелами.

Для тестирования нашего виртуального сервера и сконфигурированной технологии SSI нам необходимо написать тестовую страничку. Для этого в любом текстовом редакторе создайте файл следующего содержания:

<html>
<head>
<title>Тестирование технологии SSI</title>
</head>

<body>

<!--#include virtual="test.inc" -->

</body>
</html>

и сохраните его под именем index.shtml. Также создайте файл test.inc со следующим содержимым:

<p>Поздравляю, технология  SSI работает!</p>

Перепишите оба файла в каталог с:\web\project\website\, который сконфигурирован как каталог для документов нашего проекта, и наберите в адресной строке броузера:

http://project/

Если вы увидели в броузере поздравление, то все в порядке: SSI работает, а кроме того функционирует и новое расширение по умолчанию - index.shtml. Если у Вас что-то работает некорректно, еще раз внимательно перечитайте последние несколько абзацев и убедитесь, что вы все сделали правильно.

Apache установлен и настроен - переходим к инсталляции и конфигурированию PHP.


Часть VI :::

Установка PHP4 под Windows

Устанавливать будем последнюю доступную на момент написания данной статьи версию PHP, а именно PHP4.0.4pl1. Адрес, по которому его можно скачать, указан в конце данной статьи.

Дистрибутив представляет собой обычный ZIP-архив, и его достаточно распаковать в нужную папку. Руководствуясь теми же соображениями, которые я приводил при создании каталога для установки Apache, распакуем дистрибутив PHP в папку:

c:\usr\local\php4\

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

Теперь необходимо настроить Apache и PHP для совместной работы. Есть два основных способа установки PHP - как обычной CGI-программы и как модуля Apache. Мы рассмотрим оба и начнем с конфигурирования PHP как обычной CGI-программы.

Установка PHP как CGI-программы


Основную работу по настройке придется провести над файлом конфигурации Apache. Если вы уже успели закрыть файл httpd.conf, то открывайте его снова, и добавьте туда несколько строчек, относящихся к функционированию PHP. Вначале нам необходимо определить новый тип файла и сопоставить его с расширениями, используемыми PHP. Для этого добавляем в секцию "Document types" следующую строчку:

AddType application/x-httpd-php .phtml .php

Теперь необходимо назначить обработчик для данного типа файлов, поэтому добавьте сразу после определения типа следующий фрагмент:

ScriptAlias "/__php_dir__/" "c:/usr/local/php4/"
Action application/x-httpd-php "/__php_dir__/php.exe"

<Directory "c:/usr/local/php4">
  Options ExecCGI
</Directory>

И, наконец, мы добавим в список индексных файлов значение index.php. Для этого найдите и подкорректируйте следующую строчку:

DirectoryIndex index.html index.htm index.shtml index.php

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

<html>
<head>
<title>Тестирование технологии PHP</title>
</head>

<body>

<?
echo "Поздравляю, технология PHP работает!";
?>

</body>
</html>

и сохраним его под именем test.php в каталоге с:\web\project\website\, который мы ранее определили для хранения HTML-файлов нашего проекта. Теперь, набрав в броузере строчку:

http://project/test.php

или

http://127.0.0.2/test.php,

мы должны увидеть текст поздравления. Если все в порядке, то с конфигурированием PHP можно закончить. В противном случае, внимательно проверьте описанные выше директивы в файле httpd.conf. И еще не забудьте перезапустить Apache перед проверкой.

Установка PHP как обычной CGI-программы достаточно проста, но не позволяет нам использовать часть функций, связанных с авторизацией пользователей, постоянным подключением к базам данных и рядом других возможностей. Поэтому сейчас мы разберем более предпочтительный способ установки PHP - как модуля Apache. Этот способ обеспечивает заметно большее быстродействие ввиду отсутствия накладных расходов на запуск внешней CGI-программы. Впрочем, для нашего случая - использования локального web-сервера для тестирования сайтов - скорость выполнения не критична.

Установка PHP как модуля Apache


Первым делом нам необходимо найти скомпилированный модуль PHP для подключения его к Apache. Если вы ставили PHP так, как я описывал ранее, то нужный нам файл расположен по адресу:

c:\usr\local\php4\sapi\php4apache.dll

Скопируйте этот файл уровнем выше - в основной каталог PHP:

c:\usr\local\php4\

Теперь нужно настроить некоторые переменные в конфигурационном файле Apache. Как и при установке PHP в виде CGI-программы, необходимо добавить в секцию "Document types" определение нового типа документа:

AddType application/x-httpd-php .phtml .php

И подкорректировать строчку, содержащую список индексных файлов:

DirectoryIndex index.html index.htm index.shtml index.php

Теперь самое важное - конфигурируем загрузку модуля. Найдите в конфигурационном файле секцию "Dynamic Shared Object (DSO) Support" и добавьте в нее следующую строчку:

LoadModule php4_module "c:/usr/local/php4/php4apache.dll"

Конфигурирование можно считать оконченным. Осталось только протестировать работоспособность PHP. Не забудьте только сначала сохранить файл и перезапустить Apache. Для тестирования можно воспользоваться уже написанным ранее скриптом test.php. Наберите в броузере строчку:

http://project/test.php

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

И небольшое замечание для тех, кто уже конфигурировал PHP как CGI-программу, а теперь пробует установить его как модуль, не забудьте удалить из конфигурационного файла Apache секцию, связывающую обработчик типа файла с CGI-программой. Ведь в данном случае всей обработкой php-файлов занимается уже внешний модуль. Я имею в виду вот этот фрагмент:

ScriptAlias "/__php_dir__/" "c:/usr/local/php4/"
Action application/x-httpd-php "/__php_dir__/php.exe"

<Directory "c:/usr/local/php4">
  Options ExecCGI
</Directory>

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


Часть VII :::

Приложение

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

Архив с файлами к статье


cкачать архив с файлами к статьеcкачать архив с файлами к статье

Нажав на изображение дискеты, вы сможете скачать ZIP-архив с рабочими файлами, упомянутыми в статье. Ниже приведен полный список входящих в состав архива файлов:

  1. start.bat и shutdown.bat - командные файлы для корректного запуска и остановки web-сервера Apache;
  2. hosts - настроенный файл, определящий соответствие доменных имен и IP-адресов;
  3. httpd.conf-cgi и httpd.conf-modul - настроенные файлы конфигурации Apache, соответственно для случая установки PHP, как CGI-программы и как модуля Apache. Перед использованием не забудьте переименовать нужный файл в httpd.conf;
  4. index.shtml и test.inc - тестовые файлы для проверки работоспособности технологии SSI;
  5. test.php - тестовый файл для проверки работоспособности PHP.

Официальные сайты и дистрибутивы программ


  1. http://httpd.apache.org/ - основной сайт, посвященный применению и использованию web-сервера Apache. Здесь можно скачать последнюю версию программы практически для любой платформы
  2. http://apache.lexa.ru/ - Russian Apache. Официальный сайт поддержки русского Apache - модифицированной версии оригинального web-сервера, позволяющей корректно работать с несколькими русскими кодировками (Win1251, KOI8, MAC, CP866, ISO), автоматически определять колировку клиента и перекодировать странички в случае необходимости.
  3. http://httpd.apache.org/dist/httpd/binaries/win32/ - адрес, с которого можно скачать последнюю скомпилированную версию Apache для платформы Windows.
  4. http://www.php.net/ - основной сайт разработчиков PHP. Отсюда можно загрузить последнюю версию дистрибутива и подробную документацию по PHP.
  5. http://www.php.net/downloads.php - адрес, с которого можно скачать последнюю версию PHP для Windows-платформ.
  6. http://www.php.net/docs.php - документация по PHP4 на нескольких языках и в разнообразнейших форматах. К сожалению, русской версии нет.
  7. http://www.webclub.ru/content/programming_php/article-69.html - перевод документации PHP3, выполненный всероссийским клубом web-мастеров
  8. http://download.microsoft.com/download/platformsdk/wininst/1.1/NT4/EN-US/InstMsi.exe - инсталлятор дистрибутивов в формате .msi для WinNT
  9. http://download.microsoft.com/download/platformsdk/wininst/1.1/W9X/EN-US/InstMsi.exe - инсталлятор дистрибутивов в формате .msi для Win95/98

Ссылки на сайты, посвященные PHP


  1. http://detail.phpclub.net/ - PHP в деталях. Еженедельные статьи, посвященные программированию на PHP. Подробное разъяснение всевозможных трюков и приемов программирования. К Вашим услугам также форум и возможность высказаться по каждой статье. (Русский)
  2. http://www.php.spb.ru/ - PHP по-русски. Ответы на часто встречающиеся вопросы по PHP. Коллекция полезных ссылок и главное - форумы для начинающих и совсем продвинутых. (Русский)
  3. http://phpclub.unet.ru/ - Клуб разработчиков PHP. Большой ресурс, пытающийся систематизировать всю информацию о PHP в Рунете. Содержит несколько разделов, каждый из которых посвящен одному из аспектов программирования на PHP (общие примеры, работа с файлами, использование баз данных, работа с графикой и т.д.). (Русский)
  4. http://php.resourceindex.com/Complete_Scripts/ - Большой архив скриптов, написанных на PHP. Все программы удобно разложены по категориям и имеют рейтинг популярности. Ресурс, правда, на английском языке, но разве это остановит настоящих программистов?!
  5. http://www.hotscripts.com/PHP/Scripts_and_Programs/ - Еще один архив скриптов. Размерами он не меньше предыдущего, а, пожалуй, даже побольше. И столь же полезен. Такая же удобная разбивка по категориям и также на английском языке.


Copyright c 2001-2003 Михаил Мельников

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.